Passer au contenu principal
failproofai dispose de deux suites de tests : les tests unitaires (rapides, avec mocks) et les tests de bout en bout (invocations réelles de sous-processus).

Lancer les tests


Tests unitaires

Les tests unitaires se trouvent dans __tests__/ et utilisent Vitest avec jsdom.

Écrire un test unitaire de politique


Tests de bout en bout

Les tests E2E invoquent le vrai binaire failproofai en tant que sous-processus, lui transmettent un payload JSON via stdin et vérifient la sortie stdout ainsi que le code de sortie. Cette approche teste le chemin d’intégration complet utilisé par Claude Code.

Configuration

Les tests E2E exécutent le binaire directement depuis les sources du dépôt. Avant la première exécution, compilez le bundle CJS que les fichiers de hooks personnalisés utilisent lors de l’import depuis 'failproofai' :
Puis lancez les tests :
Recompilez dist/ chaque fois que vous modifiez l’API publique des hooks (src/hooks/custom-hooks-registry.ts, src/hooks/policy-helpers.ts ou src/hooks/policy-types.ts).

Structure des tests E2E

Utiliser les utilitaires E2E

FixtureEnv — environnement isolé par test :
createFixtureEnv() enregistre automatiquement le nettoyage via afterEach. runHook — invoquer le binaire :
Payloads — fabriques de payloads prêtes à l’emploi :

Écrire un test E2E

Formats de réponse E2E

Configuration Vitest

Les tests E2E utilisent vitest.config.e2e.mts avec :
  • environment: "node" — aucun global de navigateur requis
  • pool: "forks" — isolation réelle des processus (les tests lancent des sous-processus)
  • testTimeout: 20_000 — 20 secondes par test (démarrage du binaire + évaluation du hook)
Le pool forks est essentiel : les workers basés sur des threads partagent globalThis, ce qui peut interférer avec les tests qui lancent des sous-processus. Les forks basés sur des processus évitent ce problème.

Intégration continue

L’exécution complète en CI (bun run lint && bunx tsc --noEmit && bun run test:run && bun run build) doit passer avant toute fusion. La suite E2E s’exécute en parallèle dans un job CI distinct. Consultez Contributing pour la liste de vérification complète avant fusion.