テストの実行
ユニットテスト
ユニットテストは__tests__/ ディレクトリに配置されており、jsdom を使った Vitest で動作します。
ポリシーのユニットテストを書く
エンドツーエンドテスト
E2Eテストは実際のfailproofai バイナリをサブプロセスとして起動し、JSON ペイロードを stdin にパイプして、stdout の出力と終了コードをアサートします。これにより、Claude Code が使用する完全な統合パスをテストできます。
セットアップ
E2Eテストはリポジトリのソースから直接バイナリを実行します。初回実行前に、カスタムフックファイルが'failproofai' からインポートする際に使用する CJS バンドルをビルドしてください:
src/hooks/custom-hooks-registry.ts、src/hooks/policy-helpers.ts、または src/hooks/policy-types.ts)を変更した場合は、dist/ を再ビルドしてください。
E2Eテストの構成
E2Eヘルパーの使い方
FixtureEnv - テストごとに分離された環境:
createFixtureEnv() は afterEach クリーンアップを自動で登録します。
runHook - バイナリを呼び出す:
Payloads - 既製のペイロードファクトリ:
E2Eテストを書く
E2Eレスポンスの形式
Vitest の設定
E2Eテストはvitest.config.e2e.mts を使用し、以下の設定が適用されます:
environment: "node"- ブラウザグローバルは不要pool: "forks"- 真のプロセス分離(テストがサブプロセスを起動する)testTimeout: 20_000- テストあたり20秒(バイナリ起動 + フック評価)
forks プールは重要です。スレッドベースのワーカーは globalThis を共有するため、サブプロセスを起動するテストに干渉する可能性があります。プロセスベースのフォークではこの問題が発生しません。
CI
マージ前に、完全な CI 実行(bun run lint && bunx tsc --noEmit && bun run test:run && bun run build)がパスする必要があります。E2Eスイートは独立した CI ジョブとして並行実行されます。
マージ前の完全なチェックリストについては、Contributing を参照してください。
