はじめに
- 引き継いだプロダクトのローカル環境がつらみだった
- Dockerで開発環境を作り直すことにした
- 旧環境では通っていたPHPUnitテストが失敗する事象が発生
上記問題の原因が環境変数読み込み順に関係するものでした
環境変数の読み込み順を気にしたことなかったので(PHP初心者)備忘録
対象読者
- docker-composeの
env_file
で環境変数をロードしている - PHPUnitのバージョンが6.5以下
- 環境変数のロード順がわかっていない
原因
PHPUnitではデフォルトとして複数の環境変数の読み込みがあった際、後続の読み込み時に同じkeyの環境変数があっても上書きされないという仕様
-
元々テストが通っていた時の環境変数の読み込み順
- リポジトリの直下に
.env
とphpunit.xml
を配置、PHPUnitの環境変数読み込み順として以下のようになっていた - 環境変数の読み込み順
phpunit.xml
→.env
- リポジトリの直下に
-
Dockerで環境を用意した時の環境変数のロード
-
.env
ファイルをdocker-composeのenv_file
を利用して読み込むようにしていた - コンテナ起動時に`.envの環境変数読み込みが走る
- 環境変数の読み込み順
.env
→phpunit.xml
-
.env
の環境変数をテスト時に上書きできなくなり失敗していた
解決方法
PHPUnitを6.5以上にアップデート
$ composer remove phpunit/phpunit --dev
$ composer require phpunit/phpunit:6.5.13 --dev
phpunit.xmlの環境変数のオプション追加
force="true"
をつけると環境変数を上書くことができるようになる
phpunit.xml
<php>
<env name="APP_ENV" value="testing" force="true"/>
<env name="CACHE_DRIVER" value="array" force="true"/>
<env name="SESSION_DRIVER" value="array" force="true"/>
<env name="QUEUE_DRIVER" value="sync" force="true"/>
<env name="DB_DATABASE" value="db_test" force="true"/>
</php>