Back to catalog

practicing-tdd-with-jest

Implements features following Test-Driven Development RED/GREEN/REFACTOR cycle with Jest. Use when adding new features, fixing bugs, or refactoring existing code

  • Category: discovered
  • Tags: github, community
  • Version: 1.0.0
  • Author: walid
  • Downloads: 0
  • GitHub stars: 1
  • Updated: 2025-11-21

Download the latest version (v1.0.0) from this page.

SKILL.md

---
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