Jest
Jest est un framework de tests JavaScript très populaire.
Il permet d’écrire et d’exécuter des tests automatisés pour vérifier que le code fonctionne correctement.
Jest est utilisé dans plusieurs projets JavaScript, notamment dans de nombreuses codebases plus anciennes ou déjà établies.
1. C’est quoi Jest ?
Jest est un outil de test JavaScript.
Il permet d’utiliser :
- test() pour créer un test
- describe() pour regrouper des tests
- expect() pour créer une assertion
- toBe() pour comparer des valeurs simples
- toEqual() pour comparer des objets ou tableaux
2. Installer Jest
Dans un projet Node.js, Jest s’installe avec npm.
npm install --save-dev jest
Cette commande installe Jest comme dépendance de développement.
3. Ajouter le script de test
Dans le fichier package.json, on ajoute un script.
{
"scripts": {
"test": "jest"
}
}
Ensuite, on peut lancer les tests avec :
npm test
4. Structure d’un fichier de test
Par convention, un fichier de test Jest utilise souvent :
.test.js
Exemple :
sum.js
sum.test.js
5. Exemple simple
Fichier à tester :
// sum.js
function sum(a, b) {
return a + b;
}
module.exports = sum;
Fichier de test :
// sum.test.js
const sum = require("./sum");
test("additionne 1 + 2 pour obtenir 3", () => {
expect(sum(1, 2)).toBe(3);
});
C’est l’exemple de base recommandé dans la documentation officielle de Jest : installer Jest, créer une fonction, créer un fichier .test.js, puis lancer les tests avec npm test.
6. test()
La fonction test() permet de créer un test.
test("additionne deux nombres", () => {
expect(2 + 2).toBe(4);
});
Le premier argument décrit le test. Le deuxième argument contient le code à exécuter.
7. expect()
La fonction expect() indique la valeur à tester.
expect(2 + 2).toBe(4);
Ici, Jest vérifie que le résultat de 2 + 2 est bien 4.
8. toBe()
La méthode toBe() compare des valeurs simples.
expect(10).toBe(10);
expect("Fred").toBe("Fred");
expect(true).toBe(true);
Elle est idéale pour comparer :
- Des nombres
- Des chaînes de caractères
- Des booléens
9. toEqual()
La méthode toEqual() compare le contenu des objets et tableaux.
expect([1, 2, 3]).toEqual([1, 2, 3]);
expect({ name: "Fred" }).toEqual({ name: "Fred" });
On utilise toEqual() parce que les objets et tableaux sont comparés par référence en JavaScript.
10. describe()
La fonction describe() permet de regrouper plusieurs tests liés.
describe("sum", () => {
test("additionne deux nombres positifs", () => {
expect(sum(2, 3)).toBe(5);
});
test("additionne avec zéro", () => {
expect(sum(0, 3)).toBe(3);
});
});
Cette structure rend les tests plus organisés et plus faciles à lire.
11. CommonJS et modules
Jest est historiquement très lié à la syntaxe CommonJS.
module.exports = sum;
const sum = require("./sum");
Dans les projets modernes, on peut aussi utiliser import et export, mais cela peut demander une configuration supplémentaire selon le projet.
12. Lancer les tests
Pour exécuter les tests :
npm test
Jest cherche automatiquement les fichiers de test, comme :
- *.test.js
- *.spec.js
13. Watch mode
Le mode watch permet de relancer les tests automatiquement lorsqu’un fichier change.
npx jest --watch
C’est pratique pendant le développement.
14. Coverage
Le coverage permet de voir quelle partie du code est couverte par les tests.
npx jest --coverage
Cette commande génère un rapport de couverture.
15. Exemple complet
Fichier à tester :
// cart.js
function createMessageCart(cart) {
if (cart.size === 0) {
return "Votre panier est vide";
}
return "Votre panier contient des articles";
}
module.exports = createMessageCart;
Fichier de test :
// cart.test.js
const createMessageCart = require("./cart");
describe("createMessageCart", () => {
test("retourne un message quand le panier est vide", () => {
const cart = new Map();
expect(createMessageCart(cart))
.toBe("Votre panier est vide");
});
test("retourne un message quand le panier contient des articles", () => {
const cart = new Map();
cart.set("patate", 1);
expect(createMessageCart(cart))
.toBe("Votre panier contient des articles");
});
});
16. Jest vs Vitest
| Jest | Vitest |
|---|---|
| Très populaire historiquement | Très moderne avec Vite |
| Souvent utilisé dans de grosses codebases | Souvent utilisé dans les projets front-end récents |
| Configuration parfois plus lourde | Intégration rapide avec Vite |
| Excellent à connaître | Excellent à apprendre en premier aujourd’hui |
17. Bonnes pratiques avec Jest
- Nommer les fichiers avec .test.js
- Tester une fonction à la fois
- Utiliser describe() pour regrouper les tests
- Utiliser toBe() pour les valeurs simples
- Utiliser toEqual() pour les objets et tableaux
- Créer des tests courts et lisibles
- Tester les cas nominaux et les cas particuliers
Résumé rapide
| Concept | Utilité |
|---|---|
| Jest | Framework de tests JavaScript |
| npm install --save-dev jest | Installer Jest |
| test() | Créer un test |
| describe() | Regrouper des tests |
| expect() | Créer une assertion |
| toBe() | Comparer des valeurs simples |
| toEqual() | Comparer objets et tableaux |
| npm test | Lancer les tests |
| --watch | Relancer les tests automatiquement |
| --coverage | Mesurer la couverture de tests |