如何在Symfony 4

时间:2018-06-05 10:52:48

标签: symfony phpunit functional-testing

我对如何在symfony 4中为测试环境设置数据库感到困惑。我曾经在symfony 3及以下的 config_test.yml 文件中处理它。

最佳做法是什么?我应该在 config / packages / test中重新创建 doctrine.yaml 文件吗?

文档提到了如何通过编辑phpunit config来运行使用数据库的功能测试:

<phpunit>
    <php>
        <!-- the value is the Doctrine connection string in DSN format -->
        <env name="DATABASE_URL" value="mysql://USERNAME:PASSWORD@127.0.0.1/DB_NAME" />
    </php>
    <!-- ... -->
</phpunit>

然而,由于我需要能够将架构/加载装置更新到测试环境,因此它无法满足我的需求。

1 个答案:

答案 0 :(得分:3)

对于您想要做的事情,我通常会创建一个自定义测试引导程序来运行所需的doctrine命令,看起来像这样:

# tests/bootstrap.php
<?php

if (isset($_ENV['BOOTSTRAP_RESET_DATABASE']) && $_ENV['BOOTSTRAP_RESET_DATABASE'] == true) {
    echo "Resetting test database...";
    passthru(sprintf(
        'php "%s/../bin/console" doctrine:schema:drop --env=test --force --no-interaction',
        __DIR__
    ));
    passthru(sprintf(
        'php "%s/../bin/console" doctrine:schema:update --env=test --force --no-interaction',
        __DIR__
    ));
    passthru(sprintf(
        'php "%s/../bin/console" doctrine:fixtures:load --env=test --no-interaction',
        __DIR__
    ));
    echo " Done" . PHP_EOL . PHP_EOL;
}
require __DIR__.'/../vendor/autoload.php';

在我的phpunit.xml.dist中,我添加了env变量:

<env name="DATABASE_URL" value="sqlite:///%kernel.project_dir%/var/test.db"/>
<env name="BOOTSTRAP_RESET_DATABASE" value="1" />

如果你想看一个基本的例子我有一个Symfony 4演示项目,它使用它来设置一个基本的测试数据库,功能测试使用web测试用例。你可以在GitHub上找到它:dbrumann/product-api