ns-code-backend-tests について
PHPプロジェクトでバックエンドの PHPUnit テストを実装するスキルです。テストルートの検出または初期構築、既存パターンの確認を行い、指定された Docker テストコンテナ内での実行を求めます。
主な機能
- 01PHPUnit 設定の検出または構築
- 02コードと既存テストの確認
- 03ユニット・HTTP 機能テストの作成
- 04Docker コンテナ内でのテスト実行
- 05結果と阻害要因の報告
活用シーン
- 01バックエンド変更へのテスト追加
- 02認証・テナント分離エンドポイントのテスト
- 03バックエンドパッケージのテスト構造構築
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nextstage-brasil/ skills --skill ns-code-backend-testsインストール後、Claude Code で/ns-code-backend-testsを入力して読み込まれたか確認します。
同梱ファイルevals/evals.jsonreferences/backend-testing-architecture.md
詳細
バックエンドテストの作成
実行フェーズの PHPUnit 実装です。計画フェーズ:ns-pm-unit-test-task-generator。
ハーネスの確認
{harness_root}/rules/backend-tests-rules.mdc と backend-rules.mdc がある場合は読み込んでください。レイアウト、実行契約、ブートストラップの概要については、references/backend-testing-architecture.md を参照してください。
フェーズ 0 — バックエンドテストのルートを特定またはブートストラップする
テストクラスのコードを書く前に、PHPUnit プロジェクトを特定するか、最小限の構成を作成してください。
0.1 — 既存のテストを検出する(ブラウンフィールド)
{product_root} を次の順序で検索します。
backend/phpunit.xml{product_root}/のphpunit.xml- PHPUnit を含む
composer.jsonがあるディレクトリ配下のtests/Unit/またはtests/Feature/
phpunit.xml があるディレクトリを {backend_root} として記録してください。以下のすべてのパスは {backend_root} からの相対パスです。
0.2 — 何もない場合にブートストラップする(グリーンフィールド)
バックエンドのアプリケーションコード(app/、src/、または同等のもの)はあるものの、phpunit.xml と tests/ がない場合:
| ルール | 詳細 |
|---|---|
| 場所 | モノレポの場合は {product_root}/backend/、それ以外は {product_root}/ |
| ツリー | references/backend-testing-architecture.md に従います — phpunit.xml、tests/TestCase.php、tests/Unit/、tests/Feature/ |
| 依存関係 | 既存の composer.json 経由で PHPUnit を使用します — フロントエンドや無関係なパッケージには追加しないでください |
次に、そのディレクトリを {backend_root} に設定します。
グリーンフィールドで禁止されていること: テストがすでにあると想定すること、ホスト上で PHPUnit を実行すること、またはバックエンドパッケージ外にテストのひな型を作成すること。
0.3 — ブートストラップ後のドキュメント更新
{product_root}/docs/context/stack-confirmed.md または architecture-rules.md がある場合は、バックエンドテストの行を追加または更新してください。記載する内容は、{backend_root}、Docker テストコンテナ、フェーズ 5 の PHPUnit 実行コマンドです。
{backend_root} が確定し、phpunit.xml が読み取り可能になるまで、フェーズ 1 に進まないでください。
フェーズ 1 — 調査(機能コードを書く前)
- テスト対象コード — 実装ファイル(Service、FormRequest、Controller など)を読みます
- 既存のテスト —
tests/Unit/とtests/Feature/にある対応ファイルを読みます。重複させず、拡張してください - プロジェクトのパターン — ハーネスルールに従い、ファクトリー、
RefreshDatabase、レスポンスエンベロープ、マルチテナンシーヘルパーを確認します - タスクの契約 —
ns-pm-unit-test-task-generatorのタスクを実装する場合は、そのシナリオチェックリストに従います
フェーズ 2 — テストを作成する
- ユニットテスト:依存関係をモックし、実際の DB/キュー/キャッシュへの I/O は行いません
- フィーチャーテスト:認証、401/403、該当する場合はクロステナント P0 を含む HTTP テスト
- 命名:
{Component}Test.php、説明的な snake_case のメソッド名 - モジュールパスに合わせます:
tests/Unit/Modules/{Domain}/、tests/Feature/Modules/{Domain}/
フェーズ 3 — 実行(必須の契約)
../ns-harness/references/docker-and-testing.md も参照してください。
docker psを実行し、ドキュメントに記載された テスト コンテナを確認します(未記載の場合は一度だけ確認してください){backend_root}を作業ディレクトリとして、テストコンテナ内で実行します。
timeout 120 docker exec -w {workdir} {test_container} \
vendor/bin/phpunit --testdox --stop-on-failure --stop-on-error {optional_filter}
- タイムアウト: コマンドが 120 秒で強制終了された場合(例:終了コード 124)、実行は停止またはハングしたものとして扱います。中止してブロッカーを報告し、黙って再試行しないでください
- ホスト上で
vendor/bin/phpunitまたはphpunit.shを実行することは禁止です
フィルター実行(単一クラスまたはメソッド)にも、同じフラグとタイムアウトを使用します。
フェーズ 4 — 報告
- 成功:追加または変更したファイルを列挙します
- 失敗:
--testdoxの出力から、最初に失敗したテスト名とアサーションを示します - ハング/タイムアウト:120 秒の制限を超えたことを明記します。根本原因が不明な場合は
ns-code-investigatorを呼び出します
参照資料
| ファイル | 用途 |
|---|---|
references/backend-testing-architecture.md | レイアウト、ブートストラップ、実行契約 |
ns-pm-unit-test-task-generator | タスク契約のソース |
関連スキル
ns-pm-unit-test-task-generator— 計画タスクns-code-investigator— 失敗またはハングしたテストのデバッグns-code-coder— 計画されたユニットテストタスク以外の臨時修正