Aller au contenu principal

Tests

Protocole TDD

Règle non négociable de CLAUDE.md :

RED → GREEN → REFACTOR. Sans exception.

  1. RED : écrire le test, vérifier qu'il échoue pour la bonne raison
  2. GREEN : code minimal qui fait passer le test
  3. REFACTOR : améliorer sans casser, relancer les tests

Aucun code d'implémentation sans test rouge préalable.

L'agent tdd-specialist enforce ce cycle à chaque feature / bug fix. Il refuse d'écrire du code avant un test rouge.

Outils

NiveauOutilVersionEmplacement
Unitaire / intégrationJest + Testing Library^30 / ^16__tests__/ colocalisé avec le code
E2EPlaywright^1.59tests/e2e/

Commandes (racine)

CommandeAction
npm testJest en watch (dev)
npm test -- --ciJest en mode CI (no watch, no interactive)
npm run test:coverageJest avec coverage (seuils définis dans jest.config.ts)
npm run test:e2ePlaywright (headless)
npm run test:e2e -- --uiPlaywright UI mode (debug)

Convention des tests

Jest

  • Colocation : src/lib/parsers/bourso.tssrc/lib/parsers/__tests__/bourso.test.ts
  • Noms en anglais, descriptions en français ou anglais selon le contexte
  • Aucun mock de la base de données : pour les tests d'intégration Prisma, utiliser une base réelle (container Postgres jetable). La parité dev/prod est une exigence (ADR-001).
  • Fixtures financières : toujours en Decimal (jamais number)

Playwright

  • Un scénario E2E par user journey critique : login, import CSV, création de compte, plan budgétaire, dashboard
  • Tests déterministes : seed de données avant chaque scénario
  • Screenshots de régression (optionnel) sur les routes clés

Cadre CI

Le pipeline GitHub Actions exécute :

  1. npm ci
  2. npm run type-check
  3. npm test -- --ci
  4. npm run test:e2e (sur label PR e2e ou avant merge main)
  5. npm run build

Merge sur main bloqué si l'un de ces étages échoue (CLAUDE.md : « merger sur main avec des tests en échec » est interdit).

Règles dures

Interdits CLAUDE.md
  • Code d'implémentation sans test rouge préalable
  • console.log de debug laissé dans le code
  • @ts-ignore ou eslint-disable sans commentaire explicatif
  • Merge main avec tests en échec

Voir aussi