Skip to main content
failproofai ha due suite di test: test unitari (veloci, mockati) e test end-to-end (invocazioni reali di sottoproc

Esecuzione dei test


Test unitari

I test unitari si trovano in __tests__/ e utilizzano Vitest con jsdom.

Scrittura di un test unitario per una policy


Test end-to-end

I test E2E invocano il binario failproofai reale come sottoproc, inviano un payload JSON a stdin, e fanno asserzioni sull’output stdout e il codice di uscita. Questo testa il percorso di integrazione completo che Claude Code utilizza.

Configurazione

I test E2E eseguono il binario direttamente dalla fonte del repository. Prima della prima esecuzione, compila il bundle CJS che i file dei custom hook utilizzano quando importano da 'failproofai':
Quindi esegui i test:
Ricompila 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 del test E2E

Utilizzo degli helper E2E

FixtureEnv - ambiente isolato per test:
createFixtureEnv() registra la pulizia afterEach automaticamente. runHook - invoca il binario:
Payloads - factory di payload predisposte:

Scrittura di un test E2E

Forme di risposta E2E

Configurazione di Vitest

I test E2E utilizzano vitest.config.e2e.mts con:
  • environment: "node" - nessun globale del browser necessario
  • pool: "forks" - vera isolazione di processo (i test eseguono sottoproc)
  • testTimeout: 20_000 - 20s per test (avvio binario + valutazione hook)
Il pool forks è importante: i worker basati su thread condividono globalThis, che può interferire con i test che invocano sottoproc. I fork basati su processo evitano questo.

CI

L’esecuzione completa di CI (bun run lint && bunx tsc --noEmit && bun run test:run && bun run build) è obbligatoria per il merge. La suite E2E viene eseguita come job CI separato in parallelo. Vedi Contributing per la checklist completa pre-merge.