如何在 Symfony 4 中为测试环境设置数据库

2024-05-14

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

最佳做法是什么?我应该重新创建一个学说.yaml文件输入配置/包/测试?

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

<phpunit>
    <php>
        <!-- the value is the Doctrine connection string in DSN format -->
        <env name="DATABASE_URL" value="mysql://USERNAME:PASSWO[email protected] /cdn-cgi/l/email-protection/DB_NAME" />
    </php>
    <!-- ... -->
</phpunit>

然而,它不符合我的需求,因为我需要能够将架构/加载装置更新到测试环境。


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

# 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';

In my phpunit.xml.dist我添加环境变量:

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

如果您想查看一个基本示例,我有一个 Symfony 4 演示项目,它使用它来设置一个基本测试数据库,供使用 Web 测试用例的功能测试使用。你可以在 GitHub 上找到它:dbrumann/产品 API https://github.com/dbrumann/product-api

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Symfony 4 中为测试环境设置数据库 的相关文章

随机推荐