Как я могу загрузить приборы из функционального теста в 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/