Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:27:24 +08:00
commit c3d93bb139
4 changed files with 227 additions and 0 deletions

View File

@@ -0,0 +1,167 @@
---
name: practicing-tdd-with-jest
description: Implements features following Test-Driven Development RED/GREEN/REFACTOR cycle with Jest. Use when adding new features, fixing bugs, or refactoring existing code
allowed-tools: Read, Write, Grep, Glob, Bash
---
# Test-Driven Development avec Jest
Implémente code en suivant cycle TDD RED/GREEN/REFACTOR avec Jest.
## Table des matières
- [Quand utiliser](#quand-utiliser)
- [Cycle TDD : RED → GREEN → REFACTOR](#cycle-tdd--red--green--refactor)
- [Scripts npm](#scripts-npm)
- [Structure tests (Arrange-Act-Assert)](#structure-tests-arrange-act-assert)
- [Assertions Jest essentielles](#assertions-jest-essentielles)
- [Mocking](#mocking)
- [Tests spécialisés](#tests-spécialisés)
- [Couverture](#couverture)
- [Bonnes pratiques](#bonnes-pratiques)
- [Workflow](#workflow)
- [Checklist](#checklist)
- [En cas de doute](#en-cas-de-doute)
## 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) :**
1. Identifier comportement
2. Écrire test AVANT code
3. Test DOIT échouer ❌
**GREEN (Test passe) :**
1. Code minimum possible
2. Pas d'optimisation/généralisation
3. Faire passer test uniquement ✅
**REFACTOR (Améliorer) :**
1. Nettoyer code (noms, structure)
2. Éliminer duplications
3. Vérifier tests passent toujours ✅
## Scripts npm
- `npm test` - Tous tests
- `npm run test:watch` - Mode watch
- `npm 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és
- `test()` / `it()` - Tests individuels
- `beforeEach()` / `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 simple
- `mockReturnValue()` - Valeur
- `mockResolvedValue()` / `mockRejectedValue()` - Promesses
- `toHaveBeenCalled()`, `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
1. **Requirement :** Cas normaux + edge cases
2. **Test RED :** Doit échouer
3. **Code GREEN :** Minimum pour passer
4. **REFACTOR :** Améliorer, tests verts
5. **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 :**
1. Cycle RED → GREEN → REFACTOR OBLIGATOIRE
2. Test doit échouer d'abord (sinon inutile)
3. Code minimum (pas sur-engineering)
4. Refactor après GREEN seulement
5. Tests restent verts après refactor
6. Couverture > 80%
**Références :**
- Tests existants patterns
- jest.config.cjs - Configuration
- npm run test:coverage - État actual