LoginSignup
12
4

More than 5 years have passed since last update.

PHPUnitでは環境変数の読み込み順番に注意しよう

Last updated at Posted at 2018-12-02

はじめに

  • 引き継いだプロダクトのローカル環境がつらみだった
  • Dockerで開発環境を作り直すことにした
  • 旧環境では通っていたPHPUnitテストが失敗する事象が発生

上記問題の原因が環境変数読み込み順に関係するものでした
環境変数の読み込み順を気にしたことなかったので(PHP初心者)備忘録

対象読者

  • docker-composeのenv_fileで環境変数をロードしている
  • PHPUnitのバージョンが6.5以下
  • 環境変数のロード順がわかっていない

原因

PHPUnitではデフォルトとして複数の環境変数の読み込みがあった際、後続の読み込み時に同じkeyの環境変数があっても上書きされないという仕様

  • 元々テストが通っていた時の環境変数の読み込み順

    • リポジトリの直下に.envphpunit.xmlを配置、PHPUnitの環境変数読み込み順として以下のようになっていた
    • 環境変数の読み込み順 phpunit.xml.env
  • Dockerで環境を用意した時の環境変数のロード

    • .envファイルをdocker-composeのenv_fileを利用して読み込むようにしていた
    • コンテナ起動時に`.envの環境変数読み込みが走る
    • 環境変数の読み込み順 .envphpunit.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>

参考リンク

12
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
4