在测试结束时删除测试数据库(Symfony / PHP单元)



我正在使用PHPUnit (9.5)withSymfony (5.3).

对于我的测试,我使用config/packages/test/doctrine.yaml中的默认测试数据库配置:

doctrine:
dbal:
# "TEST_TOKEN" is typically set by ParaTest
dbname_suffix: '_test%env(default::TEST_TOKEN)%'

所以我的测试使用与prod相同的数据库,后缀为'_test'。

我添加了一些代码到tests/bootstrap.php在每次测试运行之前自动创建/重置数据库:

// delete database if exists, then create
passthru('php bin/console doctrine:database:drop --env=test --force --if-exists');
passthru('php bin/console doctrine:database:create --env=test');
// run migrations
passthru('php bin/console doctrine:migrations:migrate --env=test -n');

和我使用dama/doctrine-test-bundle对于每个测试的自动事务。



运行得很好,但是我有一个问题:

是否有一种方法可以在测试运行结束时删除数据库?(就像我在bootstrap.php中做的那样)

我知道你的bootstrap.php文件在测试前运行,你需要一个解决方案来在测试后启动一些东西。

首先,创建一个删除测试数据库的命令。

无论如何,如果您不在显式测试环境中(因为这意味着您在生产环境中),请非常小心命令中的代码停止所有执行。

然后,您可以更改编写器。Json文件,以便在一系列脚本测试后启动创建的命令。

下面是一个例子

"scripts": {
"test-and-remove": [
"@putenv APP_ENV=test",
"phpunit --configuration phpunit.xml",
"php bin/console app:drop-test-database"
],

然后你只需要通过这个新命令启动你的测试:

composer test-and-remove

最新更新