経緯
TDDを使ってLaraveで開発する。
開発環境でちょくちょくテストを動かすことになるが、
テスト実行しているとデータベースが汚れてしまう。(*1)
このためテストだけのデータベースを別にしたい。
設定
データベースを2つ用意
ひとつは mydev
もうひとつは mydev_testing
ユニットテストでは mydev_testing データベースを使う。
やりかた .envを2つ作る方式でやる
通常の開発用の設定は .envファイルに記述。
ユニットテストでは .env.oreore_testing ファイルに記述。
Laravelのプロジェクトルートにある
.envをコピーして .env.oreore_testing ファイルを作る。
.env.oreore_testingのデータベース接続先を mydev_testing に変更する。
phpunit.xmlを変更
APP_ENVのところにテスト設定ファイルの後ろの部分を記述。
こんな感じ
<php>
・・・中略・・・
<server name="APP_ENV" value="oreore_testing"/>
・・・中略・・・
</php>
追記 2021/10/27
Laravel 6.20の環境でphpunit.xmlのAPP_ENVをoreore_testingに切り替えたら、Session is missing expected key エラーが出た。
phpunit.xmlの
bootstrap="tests/bootstrap.php"
を
bootstrap="vendor/autoload.php"
に切り替えて、エラーを回避した。
注 *1
use DatabaseTransaction;を使うとテストが終わった時にrollbackするので、データベース汚れないですが、
テスト実行終了時にどんなデータが残ってたか確認できないと開発やりにくいから、use DatabaseTransaction;は使わない。