Vitest : lancer ses tests JavaScript sur la configuration de Vite

Vitest exécute les tests d'un projet JavaScript en réutilisant la configuration de Vite : fichiers de test, assertions, mode montre et couverture.
3 min de lecture
Believemy logo

Un projet moderne a déjà un outil de construction, une résolution de modules et une transformation de fichiers. Un lanceur de tests qui redemande tout cela en double part avec un handicap.

Vitest a fait le choix inverse : il se branche sur la configuration existante et lance les tests avec.


Définition

Vitest est un lanceur de tests JavaScript et TypeScript bâti sur Vite. Il découvre les fichiers de test, les exécute, compare les résultats attendus aux résultats obtenus et rend un rapport. Les modules Module ES y fonctionnent nativement, sans étape de conversion.

JAVASCRIPT
// facturation.test.js
import { describe, it, expect } from "vitest";
import { totalTTC } from "./facturation.js";

describe("totalTTC", () => {
  it("applique 20 % de TVA par défaut", () => {
    expect(totalTTC(19)).toBe(22.8);
  });

  it("accepte un autre taux", () => {
    expect(totalTTC(100, 0.055)).toBe(105.5);
  });
});

Un fichier dont le nom contient .test. ou .spec. est ramassé automatiquement. La commande npx vitest le lance et reste ensuite à l'écoute des modifications, en ne rejouant que ce qui dépend du fichier touché.


Les fonctions du quotidien

FonctionRôle
describeRegroupe des tests qui parlent du même sujet
it ou testDéclare un test et sa phrase descriptive
expectOuvre une assertion sur une valeur obtenue
beforeEachPrépare un état neuf avant chaque test
viL'objet qui fabrique les doubles et pilote l'horloge

Côté assertions, toBe compare par identité, toEqual compare le contenu en profondeur, toThrow attend une Error, et rejects attend une promesse rompue.


La configuration

Un seul fichier suffit à décrire l'environnement d'exécution et le rapport de Couverture de code. Il s'ajoute à la racine du projet, à côté du package.json.

JAVASCRIPT
// vitest.config.js
import { defineConfig } from "vitest/config";

export default defineConfig({
  test: {
    environment: "node",
    globals: false,
    coverage: {
      provider: "v8",
      reporter: ["text", "html"],
    },
  },
});
Bon à savoir

La valeur jsdom pour environment fournit un document et une window simulés, ce qui permet de tester du code d'interface sans ouvrir de navigateur.


Questions fréquentes

Question

Vitest ou Jest ?

Les deux interfaces sont volontairement très proches, au point qu'une migration se résume souvent à changer les importations. Vitest a l'avantage sur un projet déjà servi par Vite, puisqu'il n'y a plus qu'une configuration à tenir. Sur une base ancienne outillée avec Webpack, l'écosystème de Jest reste très installé.


Question

Faut-il lancer les tests en continu ?

Pendant l'écriture, oui : le mode par défaut relance uniquement les tests concernés par le fichier modifié, et la boucle de retour se compte en dizaines de millisecondes. En intégration continue, on utilise vitest run, qui exécute une seule fois puis rend la main avec un code de sortie.


Question

Où placer les fichiers de test ?

Deux conventions coexistent : à côté du fichier testé, ou dans un dossier dédié qui reproduit l'arborescence. La première rend le test visible et le fait vivre avec le code qu'il couvre. La seconde garde les dossiers de production propres. L'important est de choisir une fois pour tout le projet.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.