Skip to main content
failproofai có hai bộ test: unit tests (nhanh, mocked) và end-to-end tests (gọi subprocess thực tế).

Chạy tests


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 binary failproofai thực tế dưới dạng subprocess, pipe payload JSON vào stdin, và kiểm tra stdout output cùng exit code. Điều này test đường dẫn tích hợp hoàn chỉnh mà Claude Code sử dụng.

Thiết lập

E2E tests chạy binary trực tiếp từ repo source. Trước lần chạy đầu tiên, build CJS bundle mà các tệp custom hook sử dụng khi import từ 'failproofai':
Sau đó chạy tests:
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() tự động đăng ký afterEach cleanup. runHook - gọi binary:
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)
forks pool rất quan trọng: thread-based workers chia sẻ globalThis, điều này có thể can thiệp vào subprocess-spawning tests. 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) phải pass trước khi merge. E2E suite chạy như một separate CI job song song. Xem Contributing để có danh sách pre-merge hoàn chỉnh.