メインコンテンツへスキップ
failproofai には2つのテストスイートがあります:ユニットテスト(高速、モック使用)とエンドツーエンドテスト(実際のサブプロセス呼び出し)。

テストの実行


ユニットテスト

ユニットテストは __tests__/ ディレクトリに配置されており、jsdom を使った Vitest で動作します。

ポリシーのユニットテストを書く


エンドツーエンドテスト

E2Eテストは実際の failproofai バイナリをサブプロセスとして起動し、JSON ペイロードを stdin にパイプして、stdout の出力と終了コードをアサートします。これにより、Claude Code が使用する完全な統合パスをテストできます。

セットアップ

E2Eテストはリポジトリのソースから直接バイナリを実行します。初回実行前に、カスタムフックファイルが 'failproofai' からインポートする際に使用する CJS バンドルをビルドしてください:
その後、テストを実行します:
パブリックフック API(src/hooks/custom-hooks-registry.tssrc/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 を参照してください。