Vitest : Initialisation

Commençons par installer et configurer le framework de test Vitest dans notre projet.

Icône de calendrier
Avancé
3 chapitres

Installation

L’installation de Vitest nécessite d’avoir préalablement installé le bundler Vite dans votre projet.

copié !
npm i vite

Il est désormais temps d’installer Vitest avec :

copié !
npm i --save-dev vitest

Vous remarquerez l’emploi du --save-dev afin d’enregistrer vitest comme une dépendance de développement dans 📄 package.json.

Configuration

Configurer une commande de test

La première chose à configurer dans notre projet est la commande permettant de lancer nos tests. Pour cela, rendez-vous dans le fichier 📄 package.json et ajoutez un nouveau script npm run *** dans la propriété scripts :

package.json
copié !
{
	...
  "scripts": {
    "test": "vitest"
  }
}

Désormais, npm run test permettra d’exécuter Vitest sur vos futurs fichiers de test.

Fichier de configuration

La configuration de Vitest se base sur la configuration de Vite, définie dans le fichier 📄 vite.config.js s’il existe. De ce fait, Vitest prendra en compte les options de build existantes ainsi que les éventuels plugins utilisés (Vue, Legacy, React…).

Définir une propriété test dans vite.config

Si vous utilisez Vite en tant que solution de build, vous pouvez configurer Vitest en ajoutant une propriété test à l’intérieur du fichier 📄 vite.config.js.

vite.config.js
copié !
import { defineConfig } from 'vite'

export default defineConfig({
  test: {
    // Ma configuration Vitest
  },
})

De nombreuses options de configuration sont disponibles, comme par exemple :

  • globals : permet de définir des variables globales disponibles dans tous les tests pour éviter les imports manuels.
  • environment : définit l’environnement d’exécution des tests (par exemple, node, jsdom).
  • includes : spécifie un ensemble de fichiers ou de dossiers à inclure dans l’exécution des tests.
  • excludes : spécifie un ensemble de fichiers ou de dossiers à exclure dans l’exécution des tests.
  • Etc.

Les options de configuration de Vitest sont détaillées dans la documentation officielle.

Vitest propose une configuration par défaut assez complète, définir des options de configuration est donc purement optionnel.

Créer un fichier vitest.config

Vitest propose une seconde approche consistant à créer un fichier de configuration dédié à Vitest, nommé 📄 vitest.config.js. La configuration de Vitest sera toujours définie au sein d’une propriété test.

vitest.config.js
copié !
import { defineConfig } from 'vitest/config'

export default defineConfig({
  test: {
    // Ma configuration Vitest
  },
})

Une réponse à cette problématique consiste à utiliser la méthode mergeConfig, permettant de fusionner les configurations des 2 fichiers :

vite.config.js
copié !
import { defineConfig } from 'vite'
import Vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [Vue()],
})
vitest.config.js
copié !
import { defineConfig, mergeConfig } from 'vitest/config'
import viteConfig from './vite.config.mjs'

export default mergeConfig(viteConfig, defineConfig({
  test: {
    // Ma configuration Vitest
  }
}))

Fichiers de test

Convention

Un test sera écrit au sein d’un fichier portant l’extension .test.js ou .spec.js.

Arborescence

Vitest n’impose pas d’arborescence spécifique pour ranger ses fichiers de test, le tout est qu’elle soit la plus claire et structurée possible.

Généralement, les développeurs ont tendance à créer un dossier 📂 tests ou 📂 __tests__ à la racine, puis des sous-répertoires par fonctionnalité ou par arborescence miroir (du dossier contenant le code source).

Regroupement de tests par fonctionnalités

Les sous-dossiers regroupent les tests par typologie de fonctionnalité.

📁 tests
├── 📁 auth
│   ├── 📄 login.test.js
│   ├── 📄 logout.test.js
│   ├── 📄 register.test.js
│   ├── 📄 forgot-password.test.js
│   └── ...
├── 📁 crud-products
│   ├── 📄 create.test.js
│   ├── 📄 read.test.js
│   ├── 📄 update.test.js
│   ├── 📄 delete.test.js
│   └── ...
Regroupement de tests par arborescence miroir

Les sous-dossiers reflètent la structure du code source (souvent le dossier 📂 src).

📁 tests
├── 📁 components
│   ├── 📄 Button.test.js
│   ├── 📄 Input.test.js
│   ├── 📄 Modal.test.js
│   └── ...
├── 📁 pages
│   ├── 📄 Home.test.js
│   ├── 📄 About.test.js
│   └── ...
├── 📁 utils
│   └── 📄 helpers.test.js