Pestとは
Pest はPHPUnit上に構築されたテストフレームワークで、Laravel 11以降の新規プロジェクトにデフォルトで採用されています。PHPUnitの豊富なアサーション群をそのまま利用しながら、クロージャベースの簡潔な構文でテストを記述できます。 PHPUnitとの主な違い:PestのテストはPHPUnitで実行されるため、既存のPHPUnitテストと共存できます。
php artisan test または vendor/bin/pest で実行します。describe / it / test の使い分け
test()
最もシンプルな定義。テスト名をそのまま説明文として使います。
it()
「it should…」のような英語的な文体で自然言語に近い記述ができます。
describe()
関連するテストをグループ化します。beforeEach() の共有やファイル内での論理的な整理に使います。
Expectation API
expect() はPest独自のアサーション構文です。メソッドチェーンで条件を積み重ねられます。
基本的なアサーション
モデルに対するアサーション
and() チェーン
each() で配列の各要素を検証
データセットを使ったパラメータ化テスト
同じロジックを複数の入力値でテストするにはdataset() またはインライン with() を使います。
インラインデータセット
名前付きデータセット
tests/Datasets ディレクトリにデータセットを定義します。
クロージャを使った動的データセット
Mockeryを使ったユニットテスト
サービスのモック
スパイ
スパイはモックと違い、実装を呼び出しながら呼び出し記録を残します。部分モック
一部のメソッドだけモックし、他は実際の実装を使います。HTTPフェイクによる外部API呼び出しのテスト
Http::fake() を使うと実際のHTTPリクエストを送らずにレスポンスをスタブできます。
基本的なフェイク
エラーレスポンスのテスト
ネットワーク障害のシミュレーション
イベント・メール・通知のフェイク
Event::fake()
Mail::fake()
Notification::fake()
Artisanコマンドのテスト
対話型コマンドのテスト
RefreshDatabase と LazilyRefreshDatabase
RefreshDatabase
各テスト後にデータベースをロールバックし、クリーンな状態を保ちます。テストスイート開始時にマイグレーションを実行します。
LazilyRefreshDatabase
RefreshDatabase はすべてのテストでマイグレーションを確認しますが、LazilyRefreshDatabase はデータベースを実際に変更するテストが実行されるまでマイグレーションを遅延させます。データベースに触れないテストが多い場合に高速化できます。
コードカバレッジの計測
XdebugまたはPCOVが必要です。関連ページ
テスト入門
Laravelでのテストの基本的な書き方と
php artisan test の使い方を確認します。