Laravel TDD ワークフロー
PHPUnit と Pest を使用した Laravel アプリケーション用のテスト駆動開発。80%+ カバレッジ(ユニット + フィーチャー)。
使用時機
- Laravel の新機能またはエンドポイント
- バグ修正またはリファクタリング
- Eloquent モデル、ポリシー、ジョブ、通知のテスト
- プロジェクトが PHPUnit を標準化していない限り、新しいテストには Pest を優先
仕組み
RED-GREEN-REFACTOR サイクル
- テスト失敗を書く
- 最小限の変更を実装して合格させる
- テストを緑に保ちながらリファクタリング
テスト層
- ユニット:純粋な PHP クラス、値オブジェクト、サービス
- フィーチャー:HTTP エンドポイント、認証、バリデーション、ポリシー
- 統合:データベース + キュー + 外部バウンダリー
スコープに基づいて層を選択:
- ユニットテストを純粋なビジネスロジックとサービスに使用。
- フィーチャーテストを HTTP、認証、バリデーション、レスポンス形状に使用。
- 統合テストを DB/キュー/外部サービスを一緒に検証するときに使用。
データベース戦略
RefreshDatabaseほとんどのフィーチャー/統合テスト用(テスト実行ごとにマイグレーションを 1 回実行し、次に各テストをトランザクション内でラップ;メモリ内データベースは各テストごとに再マイグレーションする可能性がある)DatabaseTransactionsスキーマがすでにマイグレーションされており、テストごとのロールバックのみが必要なときDatabaseMigrationsすべてのテストで完全な migrate/fresh が必要なとき、またはコストを負担できるとき
RefreshDatabase をデータベースに触れるテストのデフォルトとして使用:トランザクション サポート付きデータベースの場合、マイグレーション ステップ フラグを使用して テスト実行ごとに 1 回実行し、次に各テストをトランザクション内でラップします;:memory: SQLite または非トランザクションの接続では、各テストの前にマイグレーションします。スキーマがすでにマイグレーションされており、テストごとのロールバックのみが必要なときは DatabaseTransactions を使用します。
テストフレームワーク選択
- 新しいテストの場合は Pest をデフォルトで使用。
- PHPUnit はプロジェクトがすでにそれを…