My DoctrineFixturesBundle установлен, и я могу загрузить устройство через командную строку, но как я могу загрузить светильники из своего функционального теста?Как я могу загрузить светильники из функционального теста в Symfony 2
ответ
Вы можете загрузить приборы в свой метод теста setUp()
, как вы можете видеть в this question.
Вы можете использовать код в вопросе, но при этом необходимо добавить --append
в команду doctrine:fixtures:load
, чтобы избежать подтверждения с помощью комплекта светильников.
Лучшее решение - это посмотреть на LiipFunctionalTestBundle, который упрощает использование приборов для сбора данных.
Если вы используете Symfony WebTestCase
, на самом деле есть очень простой способ загрузить ваши светильники. Ваш прибор должен реализовать FixtureInterface
; Таким образом, вы можете вызвать метод load()
непосредственно в методе теста setUp()
. Вы просто должны пройти EntityManager
к load()
методу, который может быть приобретенным из контейнера симфони:
public function setUp() {
$client = static::createClient();
$container = $client->getContainer();
$doctrine = $container->get('doctrine');
$entityManager = $doctrine->getManager();
$fixture = new YourFixture();
$fixture->load($entityManager);
}
Это пропускает все материалы ReferenceRepository - addRef/getRef –
Я просто хотел предложить немного аккуратнее подход, если вы хотите, чтобы сначала очистить таблицу предыдущих тестовых данных, например если вы используете свои тесты в 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. Надеюсь, что это поможет кому-то
Привет, я пытаюсь используйте свой подход, но намерение '$ executor' удалить всю базу данных, а не только связанные таблицы, почему это поведение? Любой пример того, как очистить сгенерированные данные при загрузке светильников? – ReynierPM
Как уже упоминалось, рекомендуется использовать LiipFunctionalTestBundle. Затем вы хотите расширить свой WebTestCase от Liip \ FunctionalTestBundle \ Test \ WebTestCase. Это позволит вызвать $this->loadFixtures()
, который принимает массив аргументов в качестве аргумента.
$fixtures = array('Acme\MemeberBundle\DataFixtures\ORM\LoadMemberData');
$this->loadFixtures($fixtures);
Для получения более подробной информации я написал короткий BlogPost: http://marcjuch.li/blog/2014/04/06/symfony2-rest-functional-testing-with-fixtures/
сделал мой ответ разрешить ваш вопрос? либо загрузите приборы в методе setUp(), как в вопросе, который я намекнул или использовал LiipFunctionalTestBundle. – nifr
@nifr Спасибо, что он соответствует моим потребностям, я использовал решение в вопросе, который вы намекали ... Я рассмотрю преимущества LiipFunctionalTestBundle ... – Ousmane