Obake Engineer Blog

【Laravel】PHPUnit実行時に開発用DBを初期化してしまわないために

LaravelPHP

2022/09/10

結論

テスト実行前に必ず php artisan config:clear を実行してcacheファイルを削除しておく。
そうしないとphpunit.xmlの設定が適用されずに、cacheに残っている開発用のenv設定が適用され、開発用のDBで RefreshDatabase が起こってしまう。

Version
・PHP 8.0
・Laravel 9.2

失敗した話

Laravel開発において、設定などを変更したり、migrationを実行した際に php artisan optimize も一緒に実行していた。

データ最適化コマンドだからやり得だろうと思っていたが、これが原因でPHPUnit実行時に開発用DBが初期化さてしまっていた。

php artisan optimize

php artisan optimize は以下のコマンドを同時に実行するコマンドである。

php artisan config:cache
php artisan route:cache

このうち php artisan config:cache はconfigディレクトリ配下をキャッシュするコマンドだが、そのキャッシュファイルは.envに書いてある環境変数をベースに作成される。

そして、このキャッシュファイルはPHPUnit設定用ファイルであるphpunit.xmlよりも適用優先度が高くなってしまうため、キャッシュファイルが存在した状態でテストを実行すると、テスト用のDBではなく開発用のDBでテストを実行してしまう。

そのため、テスト実行時に開発用のDBで RefreshDatabase が実行されてしまっていた。

対策

テスト実行前に以下コマンドを実行して、キャッシュされているconfigファイルを削除する。

php artisan config:clear

もしくは、そもそも開発時にcacheファイルを作成しない。 公式にもそう書いてある。

参考

  • Laravel test実行時にはconfig:cacheは要注意 - Qiita
  • 【Laravel】キャッシュクリア系コマンドには、テストコード実行前に流さない方がよいものがある | かきエンジン
  • 【Laravel】開発環境では「php artisan config:cache」をするべきではない - Qiita

/post-15

【Laravel】PHPUnit実行時に開発用DBを初期化してしまわないために

Search

Recent Posts

  • Apollo Clientでリクエストヘッダーに認証トークンを付与する方法
  • 【Zsh】コマンド履歴にエラーの履歴を残さない設定
  • 【Laravel】PHPUnit実行時に開発用DBを初期化してしまわないために
  • TypeScript環境でEmotionのスタイル指定に任意のpropsを渡す方法
  • Reactのレンダリングメモ

All Tags

JavaScript (7)
React (4)
GatsbyJS (3)
TypeScript (3)
Zsh (2)
Webpack (2)
Git (1)
CSS (1)
Dotenv (1)
Redux (1)
Emotion (1)
Laravel (1)
PHP (1)
GraphQL (1)
Apollo (1)
obake
Obake Engineer Blog

の検索結果: 0件中 0件表示