TDD
BDD
Testes Automatizados
Jest
Cypress
Qualidade de Código

Tests automatisés : TDD et BDD en pratique

Tests automatisés : TDD et BDD en pratique

Les tests sont la base d’un logiciel fiable. Lorsqu'ils sont bien appliqués, ils réduisent les bugs, augmentent la vitesse de livraison et donnent confiance au refactor. Deux paradigmes populaires sont le Test-Driven Development (TDD) et le Behavior-Driven Development (BDD). Bien que complémentaires, ils ont des orientations différentes.

Quand utiliser TDD vs BDD

  • TDD : focus sur les unités de code (fonctions, classes). Vous écrivez le test avant la mise en œuvre, en vous assurant que l'API publique se comporte comme prévu.
  • BDD : focus sur les comportements de haut niveau (flux utilisateurs, exigences). Utilise un langage presque naturel (Gherkin) pour décrire des scénarios.

Règle générale : utilisez TDD pour la logique métier et les bibliothèques internes ; utilisez BDD pour les flux et les intégrations de l'interface utilisateur.

Outils recommandés

CoucheOutilPourquoi utiliser
Unitaire (JS/TS)BlagueTests rapides, instantanés, couverture intégrée
Unitaire (Nœud)Moka + ChaïFlexible, bonne intégration avec Sinon
Interface utilisateur (Réagir)Bibliothèque de testsTestez l'interface utilisateur telle que la voit l'utilisateur
De bout en boutCyprèsTest de navigateur réel, débogage visuel
BDDConcombre.jsSyntaxe Gherkin, intégration Jest/Cypress

Flux TDD étape par étape

  1. Écrivez le test qui échoue (rouge).
  2. Implémentez un code minimal pour réussir (vert).
  3. Refactor en gardant les tests verts (refactor).
  4. Répétez.

Exemple pratique, fonction de formatage du prix

// priceFormatter.test.ts (Jest) import { formatPrice } from './priceFormatter'; test('formata número como moeda BRL', () => { expect(formatPrice(1234.5)).toBe('R$ 1.234,50'); });
// priceFormatter.ts (implementação mínima) export function formatPrice(value: number): string { return new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(value); }

Flux BDD avec Cucumber.js

Définition du scénario (Gherkin)

Feature: Cadastro de Usuário As a visitor I want to create an account So that I can access protected features Scenario: Cadastro bem-sucedido Given I am on the registration page When I fill the form with valid data And I submit the form Then I should see a confirmation message And I receive a verification email

Mise en place des étapes (Cyprès + Concombre)

import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps'; Given('I am on the registration page', () => { cy.visit('/register'); }); When('I fill the form with valid data', () => { cy.get('#email').type('usuario@example.com'); cy.get('#password').type('SenhaForte123!'); cy.get('#confirmPassword').type('SenhaForte123!'); }); When('I submit the form', () => { cy.get('form').submit(); }); Then('I should see a confirmation message', () => { cy.contains('Cadastro concluído').should('be.visible'); });

Bonnes pratiques générales

  • Gardez les tests rapides : si un test prend plus de 500 ms, il effectue probablement des E/S inutiles.
  • Isolation : utilisez des mocks/stubs pour les dépendances externes (API, banques).
  • Couverture minimale : une couverture de ligne de 80 % est un bon point de départ, mais donnez la priorité à la logique critique.
  • Intégration continue : configurez le pipeline (GitHub Actions, GitLab CI) pour exécuter npm test sur chaque PR.
  • Retour visuel : utilisez les plugins IDE qui affichent les résultats des tests en temps réel.

Liste de contrôle de mise en œuvre

  • Choisissez le framework de test (Jest, Cypress, etc.)
  • Configurer jest.config.js et cypress.json
  • Créer les répertoires tests/unit et tests/e2e
  • Écrire le premier test échoué pour chaque nouvelle fonctionnalité
  • Intégrer les tests dans le pipeline CI
  • Surveiller la couverture et les échecs de secours

Conclusion

TDD et BDD ne sont pas seulement des techniques, ce sont des changements de mentalité. Lorsqu’ils sont adoptés correctement, ils garantissent que votre code évolue sans crainte de casser les fonctionnalités existantes. Commencez petit, rédigez des tests clairs et laissez-les guider votre développement.


Quelle est votre expérience avec TDD ou BDD ? Partagez dans les commentaires !

A lire aussi