如何在Symfony 4中为测试环境设置数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Symfony 4中为测试环境设置数据库相关的知识,希望对你有一定的参考价值。
我对如何在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>
但是它不能满足我的需求,因为我需要能够将模式/加载装置更新到测试环境。
答案
对于您想要做的事情,我通常会创建一个自定义测试引导程序来运行所需的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
以上是关于如何在Symfony 4中为测试环境设置数据库的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 4:如何在防火墙中为用户/管理员提供多个提供者?
如何使用 LoginFormAuthenticator 和 Login Link Authenticator 在 Symfony 5.2 中为特定路径设置默认身份验证器