Tests en JavaScript (Node.js) : frameworks et outils
Des tests de qualité sont une partie essentielle du développement avec Node.js. Ils permettent de détecter les erreurs à un stade précoce, simplifient le refactoring et améliorent la fiabilité des applications. L'écosystème JavaScript offre de nombreux frameworks et utilitaires pour les tests. Dans cet article, nous examinerons les principaux outils, leurs fonctionnalités et fournirons des exemples pratiques.
1. Types de tests principaux
Avant de choisir un outil, il est important de comprendre quels types de tests vous allez écrire :
- Tests unitaires — vérifient des fonctions ou modules individuels de manière isolée.
- Tests d'intégration — vérifient l'interaction entre plusieurs modules, une base de données ou des API externes.
- Tests End-to-End (E2E) — simulent les actions de l'utilisateur dans un navigateur ou une application complète.
2. Jest — un framework polyvalent de Facebook
Jest est le framework de test JavaScript le plus populaire. Il inclut tout le nécessaire : un exécuteur de tests, une bibliothèque d'assertions, des mocks et un support intégré de la couverture de code.
Installation :
npm install --save-dev jestExemple d'un test unitaire simple pour une fonction d'addition :
// sum.jsfunction sum(a, b) { return a + b;}module.exports = sum;
// sum.test.jsconst sum = require('./sum');
test('addition de 1 + 2 est égal à 3', () => { expect(sum(1, 2)).toBe(3);});Exécution des tests :
npx jestAvantages de Jest :
- Configuration zéro pour les projets React et Node.
- Exécution automatique en mode watch.
- Mocks et espions intégrés.
- Support du code asynchrone (async/await, callbacks).
3. Mocha + Chai — une combinaison flexible
Mocha est un exécuteur de tests flexible qui n'impose pas de bibliothèque d'assertions. Il est le plus souvent utilisé avec Chai — une bibliothèque avec une syntaxe claire (should, expect, assert).
Installation :
npm install --save-dev mocha chaiExemple de test avec Chai :
// calculator.jsfunction divide(a, b) { if (b === 0) throw new Error('Division by zero'); return a / b;}module.exports = { divide };
// test.jsconst { expect } = require('chai');const { divide } = require('./calculator');
describe('Calculator', function() { it('should divide two numbers', function() { expect(divide(10, 2)).to.equal(5); });
it('should throw error when dividing by zero', function() { expect(() => divide(10, 0)).to.throw('Division by zero'); });});Exécution :
npx mocha test.jsMocha est particulièrement pratique lorsqu'un réglage fin des rapports et une intégration avec d'autres outils sont nécessaires.
4. Supertest — test des serveurs HTTP
Supertest est une bibliothèque pour les tests d'intégration des serveurs Express (et autres). Elle permet d'envoyer des requêtes HTTP et de vérifier les réponses.
Installation :
npm install --save-dev supertestExemple de test pour une application Express :
// app.jsconst express = require('express');const app = express();app.get('/hello', (req, res) => res.json({ message: 'Hello World' }));module.exports = app;
// app.test.jsconst request = require('supertest');const app = require('./app');
describe('GET /hello', function() { it('responds with json', function(done) { request(app) .get('/hello') .expect('Content-Type', /json/) .expect(200) .then(response => { expect(response.body.message).toBe('Hello World'); done(); }); });});Supertest se combine parfaitement avec Jest ou Mocha.
Aussi dans la bibliothèque
Envoi d'email en Swift (iOS/macOS) : MFMailComposeViewController et SMTP
Travailler avec les archives ZIP en Java : guide complet de java.util.zip
Sérialisation d'objets en TypeScript : bibliothèques, méthodes et exemples
Autorisation et authentification en Java : guide complet