My DoctrineFixturesBundle установлен, и я могу загрузить устройство через командную строку, но как я могу загрузить приборы из моего функционального теста?
Как я могу загрузить приборы из функционального теста в Symfony 2
Ответ 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/