Symfony 4:如何在 KernelTestCase 中加载 DataFixtures

Symfony 4: how to load DataFixtures in a KernelTestCase

我设置了 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 的方法。

那么有什么方法可以 运行 使用我测试 class 的 setUp() 方法的命令?

任何 link symfony 4 教程?任何服务的例子?我无法想象,我是唯一有这个问题的人。

我得到了一个解决方案,虽然它不是很漂亮和风格,但它是。更优雅的替代品值得赞赏。

我使用名为 AppKernel 的 class 扩展了在 Kernel.php 中找到的内核 class。 要为测试激活它,并且只有那些我更改了我的 phpunit.xml 文件:

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

所以现在只为测试加载此 class。

在AppKernel中Class我扩展了启动方式如下:

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');
}

当然,通过系统导入的调用很丑陋,但它确实有效。如果有人有更好的主意,请告诉我。