functional-tests について
Symfony 向けのテスト技能で、HTTP エンドポイント、サービス、リポジトリ、重要な URL を検証します。テストクラスの選択に加え、認証、データベース分離、レスポンス検証の方法を示します。
主な機能
- 01HTTP、カーネル、単体テストの選択
- 02エンドポイントと描画 DOM の検証
- 03loginUser() による認証
- 04データベーステストとフィクスチャの分離
- 05URL スモークテストの追加
活用シーン
- 01コントローラーレスポンスとフォームの検証
- 02実データベースを使ったサービスのテスト
- 03認証が必要なルートのテスト
- 04重要な URL のスモークテスト追加
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill functional-testsインストール後、Claude Code で/functional-testsを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
Functional Tests(Symfony)
使用する場面
- カーネル経由で、ステータス、リダイレクト、レンダリングされた DOM、フォームのエラー、メールなど、コントローラーや HTTP エンドポイントを検証する場合。
KernelTestCaseを使用して、実際のデータベースに対するリポジトリやサービスをテストする場合。- 認証が必要なルートや特定のロールに制限されたルートを、
loginUser()を使ってカバーする場合。 - 重要な URL に対して、低コストなスモークテストが必要な場合。
デフォルトのワークフロー
- 基底クラスを選択します。HTTP には
WebTestCase、サービスにはKernelTestCase、純粋なロジックには通常のTestCaseを使用します。 static::createClient()を直接呼び出し(先にbootKernel()を呼び出さない)、static::getContainer()でプライベートサービスを取得します。- ログインフォームを再送信する代わりに、
$client->loginUser($user)で認証します。 - レスポンスと DOM をアサートします。
assertResponseIsSuccessful()、assertResponseRedirects()、assertSelectorTextContains()、assertEmailCount()を使用します。 - DAMADoctrineTestBundle の
PHPUnitExtensionと、フィクスチャの Foundry リセットを使用してテストを分離します。 - データプロバイダーとハードコードした URL を使って、スモークテストを追加します。
ガードレール
- 実際のデータベースとリポジトリを使用します。データに触れるテストで EntityManager やリポジトリをモックしないでください。
- 無効なフォーム送信では、
assertResponseIsUnprocessable()を使って 422 をアサートします(Symfony 8.0+ の動作)。 - テスト環境では
.env.localは読み込まれません。.env.testまたは.env.test.localを使用してください。 assertSessionHasFlashMessage()には Symfony 8.1+ が必要です。
段階的な情報開示
- 実行時の方針とリスク管理には、このファイルを使用します。
- 実装の詳細が必要な場合は、リファレンスを参照してください。
出力要件
- それぞれに適切な基底クラスを選択したテストクラス。
- 認証とデータベース分離の方針。
- 対象とするステータスコード、DOM アサーション、スモークテスト用 URL。
リファレンス
reference.md
コメント
Markdown 対応