概要
- Dockerでローカル開発環境を作成したlaravel環境にてPHPUnitを使ってFeatureテストを実行したところ何故か
APP_ENV
がdevelopment
で実行されてしまう問題が発生し詰まったので簡単に原因をまとめる。
状況
-
.env.testingを用意して記載を行った。
-
下記コマンドを実行しUnit、Featureそれぞれのテストを実行した。
php artisan test --env=testing
-
実行されているテストコードの中に
dd(app()->environment());
のコードを仕込んでテストを実行したところdevelopment
という文字列が出力された。(本当はtesting
)と出力されてほしい。 -
APP_ENV
がtesting
になっていないと.env.testingが読み込まれずテスト用の設定でテストコードが実行されない場合がある。(ただし、--env=testing
のように設定しているため、.env.testing
は一応読み込まれているようだった。しかし.envに合って.env.testingに存在しない定数設定は.envのものが残ってしまうようだ。おそらくコンテナはdevelopmentという環境で起動しているから先に.envが読まれ、テスト実行時に--env=testing
が指定されているから.envの設定項目を.env.testingの内容で上書きしてからテストを実行していた模様。今回.envにはstripeのapiキーが設定され.env.exampleにはキーの記載すら行っていなかったためテストコードを実行し.envに記載されたstripeのキー設定が生きた状態でテストコードが実行されていることに気が付き発覚した。)
原因と解決
-
ローカル開発環境のdocker-compose.ymlを確認したところapiサービスで下記のような定数を設定していた。
environment: - APP_ENV=development
-
コンテナ起動時にAPP_ENVをdevelopmentとして起動してしまっているため、このようなことが起きている模様。
-
取り急ぎ当該のdocker_compose.ymlの内容を削除し、再び同様のコマンドでテストを実行したところ
APP_ENV
はtesting
として出力された。