测试结束时删除测试数据库(Symfony / PHP Unit)
remove test database when tests ends (Symfony / PHP Unit)
我正在使用 PHPUnit (9.5) 和 Symfony (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 中添加了一些代码以在每次测试前自动创建/重置数据库 运行s :
// 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 文件在测试前是 运行,您需要一个解决方案来在测试后启动一些东西。
首先,create a command删除测试数据库。
无论如何,如果您不在明确的测试环境中(因为这意味着您在生产环境中),请务必小心命令中的代码停止所有执行。
然后,您可以更改 composer.json 文件以在 chain of scripts.
测试后启动创建的命令
举个例子
"scripts": {
"test-and-remove": [
"@putenv APP_ENV=test",
"phpunit --configuration phpunit.xml",
"php bin/console app:drop-test-database"
],
那么您只需通过这个新命令启动您的测试:
composer test-and-remove
我正在使用 PHPUnit (9.5) 和 Symfony (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 中添加了一些代码以在每次测试前自动创建/重置数据库 运行s :
// 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 文件在测试前是 运行,您需要一个解决方案来在测试后启动一些东西。
首先,create a command删除测试数据库。
无论如何,如果您不在明确的测试环境中(因为这意味着您在生产环境中),请务必小心命令中的代码停止所有执行。
然后,您可以更改 composer.json 文件以在 chain of scripts.
测试后启动创建的命令举个例子
"scripts": {
"test-and-remove": [
"@putenv APP_ENV=test",
"phpunit --configuration phpunit.xml",
"php bin/console app:drop-test-database"
],
那么您只需通过这个新命令启动您的测试:
composer test-and-remove