| name | TDD avec Jest |
| description | Implémente les fonctionnalités en suivant le cycle Test-Driven Development RED/GREEN/REFACTOR avec Jest. Utiliser lors de l'ajout de nouvelles features, correction de bugs, ou refactoring de code existant |
Test-Driven Development avec Jest
Implémente code en suivant cycle TDD RED/GREEN/REFACTOR avec Jest.
Quand utiliser
- Implémentation nouvelles features
- Correction bugs avec reproduction
- Refactoring code existant
- Ajout comportements modules
- Validation logique complexe
Cycle TDD : RED → GREEN → REFACTOR
RED (Test échoue) :
- Identifier comportement
- Écrire test AVANT code
- Test DOIT échouer ❌
GREEN (Test passe) :
- Code minimum possible
- Pas d'optimisation/généralisation
- Faire passer test uniquement ✅
REFACTOR (Améliorer) :
- Nettoyer code (noms, structure)
- Éliminer duplications
- Vérifier tests passent toujours ✅
Scripts npm
npm test- Tous testsnpm run test:watch- Mode watchnpm run test:coverage- Avec couverture
Structure tests (Arrange-Act-Assert)
AAA Pattern :
- Arrange : Préparer données
- Act : Exécuter action
- Assert : Vérifier résultat
Grouping :
describe()- Grouper tests liéstest()/it()- Tests individuelsbeforeEach()/afterEach()- Setup/cleanup
Nommage : Descriptif ("should do X when Y", "handles edge case Z")
Assertions Jest essentielles
- Égalité:
toBe()(strict),toEqual()(profonde) - Booléens:
toBeTruthy(),toBeFalsy(),toBeNull(),toBeUndefined() - Nombres:
toBeGreaterThan(),toBeLessThan(),toBeCloseTo() - Arrays:
toContain(),toHaveLength() - Exceptions:
toThrow(),toThrow(ErrorClass)
Voir documentation Jest pour liste complète.
Mocking
Fonctions :
jest.fn()- Mock simplemockReturnValue()- ValeurmockResolvedValue()/mockRejectedValue()- PromessestoHaveBeenCalled(),toHaveBeenCalledWith(args),toHaveBeenCalledTimes(n)
Modules : Isoler code testé, éviter dépendances externes (API, localStorage)
Tests spécialisés
Async : async/await recommandé, ou expect().resolves/rejects
DOM/UI : jsdom simule DOM - créer, attacher, exécuter, vérifier, cleanup
Canvas (jeux arcade) : Mock context, mock performance.now(), tester logique séparément rendu, tests d'état
Couverture
Cibles : Branches > 80%, Functions > 80%, Lines > 80%, Statements > 80%
Lance npm run test:coverage, examine rapport.
Bonnes pratiques
Do's :
- Test AVANT code TOUJOURS
- Un test à la fois (RED → GREEN → REFACTOR)
- Tests descriptifs (noms clairs)
- Isolés, indépendants
- Edge cases (null, undefined, limites)
- Rapides (< 100ms idéal)
Don'ts :
- Pas de code avant test
- Pas de tests trop larges
- Pas de tests fragiles (timing, random)
- Pas de RED ignoré (test inutile)
- Pas de .skip tests
Workflow
- Requirement : Cas normaux + edge cases
- Test RED : Doit échouer
- Code GREEN : Minimum pour passer
- REFACTOR : Améliorer, tests verts
- Répéter : Couverture > 80%
Checklist
- Test écrit AVANT code
- Test échoue (RED)
- Code minimum
- Test passe (GREEN)
- Refactorisé si besoin
- Noms descriptifs
- AAA pattern
- Mocks isolent
- Edge cases
- Couverture > 80%
- Tests rapides
En cas de doute
Règles absolues :
- Cycle RED → GREEN → REFACTOR OBLIGATOIRE
- Test doit échouer d'abord (sinon inutile)
- Code minimum (pas sur-engineering)
- Refactor après GREEN seulement
- Tests restent verts après refactor
- Couverture > 80%
Références :
- Tests existants patterns
- jest.config.cjs - Configuration
- npm run test:coverage - État actual