Symfony 4:如何在KernelTestCase中加载DataFixtures

时间:2018-07-03 17:06:31

标签: unit-testing doctrine symfony4

我设置了DataFixtures,可以通过控制台将其加载到测试数据库中。

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

像一个chram一样工作

但是我不知道如何在服务单元测试中自动加载这些灯具,而不必在测试之前手动运行命令。必须有另一种方式!

到目前为止,我发现的是使用旧版symfony进行测试或测试Controller的描述。如果可以避免,谁仍然想测试Controller?

Liip \ FunctionalTestBundle似乎也仅适用于WebTestCases,至少我没有看到扩展或替换常规KernelTestCase的方法。

那么,有什么方法可以通过测试类的setUp()方法运行命令?

是否有指向symfony 4教程的链接?有服务示例吗?我无法想象,我是唯一遇到这个问题的人。

1 个答案:

答案 0 :(得分:0)

我得到了一个解决方案,尽管它并不充满美感和风格。我们赞赏更优雅的选择。

我使用名为AppKernel的类扩展了在Kernel.php中找到的Kernel类。 要激活它以进行测试,并且仅激活那些我更改了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');
}

因此,通过系统导入的调用当然很丑陋,但它可以工作。如果有人有更好的主意,请告诉我。