Chuyển đến nội dung chính
failproofai có hai bộ kiểm thử: unit tests (nhanh, mocked) và end-to-end tests (subprocess thực).

Chạy kiểm thử


Unit tests

Unit tests nằm trong __tests__/ và sử dụng Vitest với jsdom.

Viết unit test cho policy


End-to-end tests

E2E tests gọi nhị phân failproofai thực làm subprocess, pipe payload JSON tới stdin, và assert stdout output cũng như exit code. Điều này kiểm thử đường dẫn tích hợp hoàn chỉnh mà Claude Code sử dụng.

Setup

E2E tests chạy nhị phân trực tiếp từ nguồn repo. Trước lần chạy đầu tiên, build bundle CJS mà các file custom hook sử dụng khi import từ 'failproofai':
Sau đó chạy các kiểm thử:
Rebuild dist/ bất cứ khi nào bạn thay đổi public hook API (src/hooks/custom-hooks-registry.ts, src/hooks/policy-helpers.ts, hoặc src/hooks/policy-types.ts).

Cấu trúc E2E test

Sử dụng E2E helpers

FixtureEnv - isolated per-test environment:
createFixtureEnv() đăng ký cleanup afterEach tự động. runHook - gọi nhị phân:
Payloads - ready-made payload factories:

Viết E2E test

Hình dạng E2E response

Vitest config

E2E tests sử dụng vitest.config.e2e.mts với:
  • environment: "node" - không cần browser globals
  • pool: "forks" - true process isolation (tests spawn subprocesses)
  • testTimeout: 20_000 - 20s per test (binary startup + hook eval)
Pool forks rất quan trọng: thread-based workers chia sẻ globalThis, điều này có thể gây ảnh hưởng tới các tests spawning subprocess. Process-based forks tránh điều này.

CI

Full CI run (bun run lint && bunx tsc --noEmit && bun run test:run && bun run build) được yêu cầu pass trước khi merge. E2E suite chạy như một separate CI job song song. Xem Contributing để biết complete pre-merge checklist.