Skip to main content
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 を参照してください。