はじめに
題名の通り、PHPUnitを動かした際に No application encryption key has been specified.
でほとんどのテストがエラー落ちしていました。
しかしながら暗号キーは設定済みです。envにもちゃんと記載されていました。
原因が何か理解するまでに結構時間を取られてしまったので、備忘録として残しておきます。
因みにLaravelは5.5を使用しています。
エラーの内容
まず、テストがエラー落ちしている原因ですが、題名にもあるように No application encryption key has been specified.
というExceptionが発生しているからです。
このExceptionはenvファイルのAPP_KEYの値が適切でない場合は起こります。
.env.exampleをコピーしてそのまま使っていたーっていう場合に良く起きます。
この時はプロジェクトルートで php artisan key:generate
を打つことで自動で.envの中のAPP_KEYに暗号キーを設定してくれます。
今回のケース
今回も同じExceptionが発生しているのですが、暗号キーが設定されていないわけではありません。
localhostで稼働しているシステムにアクセスすれば普通にページが見れていました。
PHPUnitを走らせたときにだけ発生してます。
テスト実行前には、config:clear Artisanコマンドを実行し、設定キャッシュをクリアするのを忘れないでください。
公式ドキュメントを見ると上記のように書いているので php artisan config:clear
を叩いて設定キャッシュをクリアしましたがそれでもダメでした。
解決策
解決する方法ですが、config:clear
だけでは不十分だったようです。
一度設定キャッシュをクリアし、最新の設定情報を再度キャッシュさせる必要がありました。
$ php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!
php artisan config:cache
を叩くと、クリアとキャッシュの両方を行ってくれます。
こうして、最新の設定情報をキャッシュさせた状態でPHPUnitを動かすと、先ほどのExceptionは発生しなくなりました。
まとめ
キャッシュのクリア後には、再度キャッシュするのを忘れないこと!