我正在使用PHPUnit(9.5)和Symfony(5.3)。
對于我的測驗,我使用config/packages/test/doctrine.yaml中的默認測驗資料庫配置 :
doctrine:
dbal:
# "TEST_TOKEN "通常由ParaTest設定。
dbname_suffix: '_test%env(default::TEST_TOKEN)%'
所以我的測驗使用與prod相同的資料庫,后綴為'_test'。
我在tests/bootstrap.php中添加了一些代碼,以便在每次測驗運行前自動創建/重置資料庫:
// delete database if exists, then create.
passthru('php bin/console doctrine:drop --env=test --force --if-exists') 。
passthru('php bin/console doctrine:database:create --env=test') 。
//運行遷移。
passthru('php bin/console doctrine:migrations:migrate --env=test -n')。
而且我使用dama/doctrine-test-bundle為每個測驗自動處理事務。
這樣做效果很好,但我有一個問題:
有沒有一種方法可以讓我們的測驗變得更簡單?
是否有辦法在測驗運行結束后洗掉資料庫?(就像我在 bootstrap.php 中做的那樣) uj5u.com熱心網友回復: 我理解你的bootstrap.php檔案是在測驗前運行的,你需要一個解決方案來在你的測驗后啟動一些東西。
首先,創建一個命令,洗掉測驗資料庫。 無論如何,要非常小心,如果你不在一個明確的測驗環境中,你的命令中的代碼要停止所有的執行(因為這意味著你在一個生產環境中)。
然后,你可以修改你的 composer.json 檔案,以便在你的測驗之后在腳本鏈中啟動創建的命令。
下面是一個例子 然后你只需要通過這個新的命令來啟動你的測驗:
標籤: "scripts": {
"test-and-remove": [/span>
"@putenv APP_ENV=test",
"phpunit --configuration phpunit.xml"/span>,
"php bin/console app:drop-test-database"
]/span>,
composer test-and-remove
