Vitest

Vitest est un framework de tests JavaScript moderne.

Il permet d’écrire et d’exécuter des tests automatisés dans un vrai projet.

Vitest est particulièrement utilisé avec les projets modernes basés sur Vite.

1. C’est quoi Vitest ?

Vitest est un outil qui permet de tester du code JavaScript automatiquement.

Il permet d’utiliser :

Selon la documentation officielle, Vitest est un framework de tests nouvelle génération alimenté par Vite.

2. Installer Vitest

Dans un projet Node.js ou Vite, on peut installer Vitest avec npm.

npm install -D vitest

Le -D signifie que Vitest est installé comme dépendance de développement.

3. Ajouter le script de test

Dans le fichier package.json, on ajoute un script.

{
    "scripts": {
        "test": "vitest"
    }
}

Ensuite, on peut lancer les tests avec :

npm run test

4. Structure d’un fichier de test

Par convention, un fichier de test contient souvent .test.js ou .spec.js dans son nom.

math.js
math.test.js

Exemple de fichier normal :

// math.js

export function add(a, b) {

    return a + b;

}

Exemple de fichier de test :

// math.test.js

import { expect, test } from "vitest";

import { add } from "./math.js";

test("additionne deux nombres", () => {

    expect(add(2, 3)).toBe(5);

});

5. Importer les outils de Vitest

Pour utiliser Vitest, on importe les fonctions nécessaires.

import { describe, test, expect } from "vitest";
Fonction Rôle
describe() Regrouper plusieurs tests
test() Définir un test
expect() Créer une assertion

6. test()

La fonction test() permet de déclarer un test.

test("additionne deux nombres", () => {

    expect(2 + 2).toBe(4);

});

Le premier argument est une description du test. Le deuxième argument est une fonction contenant les assertions.

7. expect()

La fonction expect() indique la valeur à tester.

expect(2 + 2).toBe(4);

Ici, Vitest vérifie que le résultat de 2 + 2 est bien 4.

8. toBe()

La méthode toBe() compare des valeurs simples.

expect("Fred").toBe("Fred");

expect(true).toBe(true);

expect(10).toBe(10);

Elle est surtout utilisée avec :

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" });

Elle est utile 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 au même sujet.

describe("Fonction add", () => {

    test("additionne deux nombres positifs", () => {

        expect(add(2, 3)).toBe(5);

    });

    test("additionne avec zéro", () => {

        expect(add(0, 3)).toBe(3);

    });

});

Cette structure rend les tests plus lisibles.

11. it() vs test()

Dans Vitest, it() et test() servent au même objectif.

it("additionne deux nombres", () => {

    expect(add(1, 2)).toBe(3);

});

Certains développeurs préfèrent it() parce que la phrase se lit naturellement.

12. Lancer les tests

Pour lancer les tests :

npm run test

Par défaut, Vitest peut fonctionner en mode watch pendant le développement.

Cela signifie qu’il peut relancer les tests lorsqu’un fichier change.

13. Lancer les tests une seule fois

Pour exécuter les tests une seule fois, on utilise :

npx vitest run

Cette commande est utile pour valider rapidement un projet.

14. Tester avec coverage

Le coverage permet de mesurer quelle partie du code est couverte par les tests.

{
    "scripts": {
        "test": "vitest",
        "coverage": "vitest run --coverage"
    }
}

Ensuite :

npm run coverage

Vitest peut utiliser la couverture native avec v8 ou une couverture instrumentée avec istanbul.

15. Exemple complet

Fichier à tester :

// cart.js

export function createMessageCart(cart) {

    if (cart.size === 0) {

        return "Votre panier est vide";

    }

    return "Votre panier contient des articles";

}

Fichier de test :

// cart.test.js

import { describe, test, expect } from "vitest";

import { createMessageCart } from "./cart.js";

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. Bonnes pratiques avec Vitest

Résumé rapide

Concept Utilité
Vitest Framework de tests moderne
npm install -D vitest Installer Vitest
test() Créer un test
it() Alias de test()
describe() Regrouper des tests
expect() Créer une assertion
toBe() Comparer des valeurs simples
toEqual() Comparer objets et tableaux
vitest run Lancer les tests une seule fois
coverage Mesurer la couverture des tests