Esecuzione dei test
Unit test
Gli unit test si trovano in__tests__/ e utilizzano Vitest con happy-dom.
Scrivere un unit test per una policy
Test end-to-end
I test E2E invocano il binariofailproofai reale come subprocess, inviano un payload JSON a stdin e effettuano asserzioni sull’output stdout e il codice di uscita. Questo verifica il percorso di integrazione completo che utilizza Claude Code.
Setup
I test E2E eseguono il binario direttamente dal codice sorgente del repository. Prima della prima esecuzione, compila il bundle CJS che i file di custom hook utilizzano quando importano da'failproofai':
dist/ ogni volta che modifichi l’API pubblica dei hook (src/hooks/custom-hooks-registry.ts, src/hooks/policy-helpers.ts, o src/hooks/policy-types.ts).
Struttura dei test E2E
Utilizzo degli helper E2E
FixtureEnv - ambiente isolato per ogni test:
createFixtureEnv() registra la pulizia afterEach automaticamente.
runHook - invoca il binario:
Payloads - factory di payload già pronti:
Scrivere un test E2E
Forme di risposta E2E
| Decisione | Codice di uscita | stdout |
|---|---|---|
PreToolUse deny | 0 | {"hookSpecificOutput":{"permissionDecision":"deny","permissionDecisionReason":"..."}} |
PostToolUse deny | 0 | {"hookSpecificOutput":{"additionalContext":"Blocked ... because: ..."}} |
| Instruct (non-Stop) | 0 | {"hookSpecificOutput":{"additionalContext":"Instruction from failproofai: ..."}} |
| Stop instruct | 2 | stdout vuoto; ragione in stderr |
| Allow | 0 | stringa vuota |
Config di Vitest
I test E2E utilizzanovitest.config.e2e.mts con:
environment: "node"- nessuna global del browser necessariapool: "forks"- vera isolazione dei processi (i test avviano subprocess)testTimeout: 20_000- 20s per test (startup del binario + valutazione hook)
forks è importante: i worker basati su thread condividono globalThis, il che può interferire con i test che avviano subprocess. I fork basati su processi evitano questo problema.
CI
L’esecuzione CI completa (bun run lint && bunx tsc --noEmit && bun run test:run && bun run build) è richiesta per essere approvata prima di fare merge. La suite E2E viene eseguita come un job CI separato in parallelo.
Consulta Contributing per la checklist completa pre-merge.
