javascript-typescript-jest

Par github · awesome-copilot

Bonnes pratiques pour écrire des tests JavaScript/TypeScript avec Jest, notamment les stratégies de mocking, la structure des tests et les patterns courants.

npx skills add https://github.com/github/awesome-copilot --skill javascript-typescript-jest

Structure des tests

  • Nommez les fichiers de test avec le suffixe .test.ts ou .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() ou mockReturnValue() pour définir le comportement du mock
  • Réinitialisez les mocks entre les tests avec jest.resetAllMocks() dans afterEach

Tester le code asynchrone

  • Retournez toujours les promesses ou utilisez la syntaxe async/await dans les tests
  • Utilisez les matchers resolves/rejects pour 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 userEvent plutôt que fireEvent pour 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)

Skills similaires