Structure des tests
- Nommez les fichiers de test avec le suffixe
.test.tsou.test.js - Placez les fichiers de test à côté du code qu'ils testent ou dans un répertoire dédié
__tests__ - Utilisez des noms de test descriptifs qui expliquent le comportement attendu
- Utilisez des blocs describe imbriqués pour organiser les tests connexes
- Suivez le pattern :
describe('Component/Function/Class', () => { it('should do something', () => {}) })
Mocking efficace
- Mocké les dépendances externes (APIs, bases de données, etc.) pour isoler vos tests
- Utilisez
jest.mock()pour les mocks au niveau du module - Utilisez
jest.spyOn()pour les mocks de fonctions spécifiques - Utilisez
mockImplementation()oumockReturnValue()pour définir le comportement du mock - Réinitialisez les mocks entre les tests avec
jest.resetAllMocks()dansafterEach
Tester le code asynchrone
- Retournez toujours les promesses ou utilisez la syntaxe async/await dans les tests
- Utilisez les matchers
resolves/rejectspour les promesses - Définissez des timeouts appropriés pour les tests lents avec
jest.setTimeout()
Snapshot testing
- Utilisez les snapshot tests pour les composants UI ou les objets complexes qui changent rarement
- Gardez les snapshots petits et ciblés
- Examinez attentivement les changements de snapshot avant de les valider
Tester les composants React
- Utilisez React Testing Library plutôt que Enzyme pour tester les composants
- Testez le comportement de l'utilisateur et l'accessibilité des composants
- Interrogez les éléments par rôles d'accessibilité, labels ou contenu texte
- Utilisez
userEventplutôt quefireEventpour des interactions utilisateur plus réalistes
Matchers Jest courants
- Basiques :
expect(value).toBe(expected),expect(value).toEqual(expected) - Véracité :
expect(value).toBeTruthy(),expect(value).toBeFalsy() - Nombres :
expect(value).toBeGreaterThan(3),expect(value).toBeLessThanOrEqual(3) - Chaînes :
expect(value).toMatch(/pattern/),expect(value).toContain('substring') - Tableaux :
expect(array).toContain(item),expect(array).toHaveLength(3) - Objets :
expect(object).toHaveProperty('key', value) - Exceptions :
expect(fn).toThrow(),expect(fn).toThrow(Error) - Fonctions mock :
expect(mockFn).toHaveBeenCalled(),expect(mockFn).toHaveBeenCalledWith(arg1, arg2)