【问题标题】:How to setup a database for test environment in Symfony 4如何在 Symfony 4 中为测试环境设置数据库
【发布时间】:2018-11-14 20:02:38
【问题描述】:

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

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

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

<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>

但是它不能满足我的需求,因为我需要能够将架构/加载装置更新到测试环境。

【问题讨论】:

标签: symfony phpunit functional-testing


【解决方案1】:

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

# 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

【讨论】:

  • 我尝试过类似的方法,但似乎 passthu'ed 控制台命令无法运行我在 phpunit.xml 中的 &lt;env ... 条目定义的环境...
  • 存在使用值的层次结构,因此可能是您的项目的.env.test(.local) 文件或您的系统环境覆盖了phpunit.xml.dist 中的设置。
  • 啊,不,我刚刚发现不可能在测试套件中定义&lt;env... 命令,我正在尝试这个。还是谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多