Symfony 4: как загрузить DataFixtures в KernelTestCase - PullRequest
0 голосов
/ 03 июля 2018

У меня настроены DataFixtures, которые я могу загрузить через консоль в свою тестовую базу данных.

$ php bin/console doctrine:fixtures:load --env=test -n
> purging database
> loading App\DataFixtures\PropertyFixtures
> loading App\DataFixtures\UserFixtures
> loading App\DataFixtures\UserPropertyFixtures

работает как крам

Но я заблудился, как автоматически загружать эти приборы с помощью тестов моего сервисного модуля, без необходимости запуска команды вручную перед тестированием. Должен быть другой путь!

На данный момент я нашел описания для тестирования с более старыми версиями Symfony или для тестирования контроллеров. Кто в любом случае хочет проверить контроллеры, если вы можете избежать этого?

Liip \ FunctionalTestBundle, похоже, также работает только для WebTestCases, по крайней мере, я не видел способа расширить или заменить обычный KernelTestCase.

Так есть ли способ, которым я могу выполнить команду с помощью метода setUp () моего тестового класса?

Любая ссылка на учебник для Symfony 4? Любой пример для службы? Я не могу себе представить, что я единственный человек с этой проблемой.

1 Ответ

0 голосов
/ 04 июля 2018

У меня есть решение, и хотя оно не полно красоты и стиля, вот оно. Ценится более элегантная альтернатива.

Я расширил класс Kernel, найденный в Kernel.php, классом AppKernel. Чтобы активировать его только для тестов, я изменил свой файл phpunit.xml:

<php>
    <ini name="error_reporting" value="-1" />
    <env name="KERNEL_CLASS" value="App\AppKernel" />

Так что теперь только для тестов этот класс загружается.

В классе AppKernel я расширил метод загрузки следующим образом:

public function boot()
{
    parent::boot();
    $this->importDataFixtures();
}

/**
 * Loads the tests data for DataFixtures when we start phpUnit.
 */
protected function importDataFixtures()
{
    system('php /var/www/octopus/bin/console doctrine:fixtures:load --env=test -n');
}

Так что, конечно, вызов импорта через систему ужасен, но работает. Если у кого-то есть идея получше, пожалуйста, дайте мне знать.

...