Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
21
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@akkino_D-En

【Laravel】.env.testingの使用方法と注意点

LaravelでPHPUnitを使うときにテスト用の`.env`を設定するのにハマったので記事にしました。

環境

Docker 19.03.8
PHP 7.3.16
Laravel 6.18.3

.env.testingの設定方法

本番DBを汚さないようにPHPUnitを実行する時のみテスト用のDBを使うようなことはよくあると思います。

その方法の一つとして.env.testingを作成し、phpunitにその設定値を読み込ませるやり方があります。

.env.exampleをコピーして.env.testingを作成し、以下の箇所を変更します。

env.testing
APP_ENV=testing // testingに変更
APP_KEY= // 空にしておく

// 接続したいDBの情報を設定する
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=test_database
DB_USERNAME=root
DB_PASSWORD=

そうしたらphpunit.xmlを開き、APP_ENVの値をtestingに変更します。

phpunit.xml
<php>
    <env name="APP_ENV" value="testing" force="true"/>
    <env name="DB_CONNECTION" value="mysql"/>
    <env name="BCRYPT_ROUNDS" value="4"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="MAIL_DRIVER" value="array"/>
    <env name="QUEUE_CONNECTION" value="sync"/>
    <env name="SESSION_DRIVER" value="array"/>
</php>

最後に.env.testingに新規にアプリケーションキーを設定したら完了です。
これをしないと.envAPP_KEYを参照しに行ってしまい、本番用のDBのデータが全部飛ぶので注意しましょう。

php artisan key:generate --env=testing

ハマったポイント

docker-compose.ymlなどで環境変数にAPP_ENVDB_DATABASEなどの設定をしている場合、注意しなくてはいけない点があります。
phpunit.xmlで環境変数を上書きする際に、デフォルトだと<server>タグになっていますが、これを<env>タグに変更する必要があります。

phpunit.xml
<php>
    <server name="APP_ENV" value="testing" force="true"/>
    <server name="DB_CONNECTION" value="mysql"/>
    ...
</php>
phpunit.xml
<php>
    <env name="APP_ENV" value="testing" force="true"/>
    <env name="DB_CONNECTION" value="mysql"/>
    ...
</php>

<server>タグと<env>タグは以下のような違いになっています。

$_SERVER['APP_ENV'] = 'testing'; // <server>
$_ENV['APP_ENV'] = 'testing'; // <env>

今回はdocker-compose.ymlで環境変数としてAPP_ENVなどを定義していたので、さらにそれを上書きする必要がありました。

参考文献

Laravel 7.x テスト: テストの準備
Laravel × Docker でテスト用のデータベースコンテナを使う

21
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
21
Help us understand the problem. What is going on with this article?