Подтвердить что ты не робот

Как я могу загрузить приборы из функционального теста в Symfony 2

My DoctrineFixturesBundle установлен, и я могу загрузить устройство через командную строку, но как я могу загрузить приборы из моего функционального теста?

4b9b3361

Ответ 1

Вы можете загрузить приборы в свой тестовый метод setUp(), как вы можете видеть в этом вопросе.

Вы можете использовать код в вопросе, но вам нужно добавить --append в команду doctrine:fixtures:load, чтобы избежать подтверждения с помощью пакета приборов.

Лучшее решение - взглянуть на LiipFunctionalTestBundle, что упрощает использование инструментов для передачи данных.

Ответ 2

Если вы используете symfony WebTestCase, на самом деле очень простой способ загрузить ваши светильники. Ваш прибор должен реализовать FixtureInterface; таким образом, метод load() можно вызвать непосредственно в вашем тесте setUp(). Вам просто нужно передать EntityManager методу load(), который можно получить из контейнера symfony:

public function setUp() {
    $client = static::createClient();
    $container = $client->getContainer();
    $doctrine = $container->get('doctrine');
    $entityManager = $doctrine->getManager();

    $fixture = new YourFixture();
    $fixture->load($entityManager);
}

Ответ 3

Я просто хотел предложить немного более аккуратный подход, если вы хотите сначала очистить таблицу предыдущих тестовых данных, например. если вы запускаете свои тесты в phpunit.

use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
use Doctrine\Common\DataFixtures\Loader;
use Namespace\FakeBundle\DataFixtures\ORM\YourFixtures;

public function setUp()
{
    static::$kernel = static::createKernel();
    static::$kernel->boot();
    $this->em = static::$kernel->getContainer()
        ->get('doctrine')
        ->getManager()
    ;

    $loader = new Loader();
    $loader->addFixture(new YourFixtures);

    $purger = new ORMPurger($this->em);
    $executor = new ORMExecutor($this->em, $purger);
    $executor->execute($loader->getFixtures());

    parent::setUp();
}

Это позволяет загружать светильники (вы можете больше нажимать на метод добавления оснастки) и очищать таблицы перед их загрузкой. Также обратите внимание, что MongoDB имеет ту же опцию, что и MongoDBPurger, и MongoDBExecutor. Надеюсь, что это поможет кому-то.

Ответ 4

Как уже упоминалось, рекомендуется использовать LiipFunctionalTestBundle. Затем вы хотите расширить свой WebTestCase от Liip\FunctionalTestBundle\Test\WebTestCase. Это позволит вызвать $this->loadFixtures(), который принимает массив аргументов в качестве аргумента.

$fixtures = array('Acme\MemeberBundle\DataFixtures\ORM\LoadMemberData');
$this->loadFixtures($fixtures);

Для более подробной информации я написал короткую блог-страницу: http://marcjuch.li/blog/2014/04/06/symfony2-rest-functional-testing-with-fixtures/