Skip to main content
failproofai dispose de deux suites de tests : des tests unitaires (rapides, avec mocks) et des tests end-to-end (invocations réelles de sous-processus).

Exécuter les tests


Tests unitaires

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

Écrire un test unitaire de politique


Tests end-to-end

Les tests E2E invoquent le véritable binaire failproofai en tant que sous-processus, envoient un payload JSON sur stdin et vérifient la sortie stdout ainsi que le code de sortie. Ils testent le chemin d’intégration complet qu’utilise Claude Code.

Configuration

Les tests E2E exécutent le binaire directement depuis les sources du dépôt. Avant le premier lancement, compilez le bundle CJS que les fichiers de hooks personnalisés utilisent lors de leurs imports depuis 'failproofai' :
Puis lancez les tests :
Recompilez dist/ à chaque modification de 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 un nettoyage via afterEach. runHook - invoquer le binaire :
Payloads - factories 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" - aucune variable globale navigateur requise
  • 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 important : 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 de la CI (bun run lint && bunx tsc --noEmit && bun run test:run && bun run build) doit réussir avant toute fusion. La suite E2E s’exécute en tant que job CI séparé, en parallèle. Consultez Contributing pour la liste de vérification complète avant fusion.