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

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

4 ответа

Решение

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

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

Лучшее решение - взглянуть на https://github.com/liip/LiipFunctionalTestBundle, который упрощает использование данных.

Если вы используете Symfony's 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);
}

Я просто хотел предложить немного более аккуратный подход, если вы хотите сначала очистить свою таблицу от предыдущих тестовых данных, например, если вы запускаете свои тесты в 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. Надеюсь, это поможет кому-то

Как уже упоминалось, рекомендуется использовать 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/

Другие вопросы по тегам