Skip to content
Vitest 3
Main Navigation Guide & APIConfigurationMode NavigateurAPI avancée
3.2.0
2.1.9
1.6.1
0.34.6

Français

English
简体中文
繁體中文
Español
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Français

English
简体中文
繁體中文
Español
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Apparence

Sidebar Navigation

Introduction

Pourquoi Vitest

Démarrage

Fonctionnalités

Configuration de Vitest

API

Référence de l'API des Tests

Fonctions Mocks

vi

expect

expectTypeOf

assert

assertType

Guide

Interface en ligne de commande (CLI)

Filtrage des tests

Projets de Test

Rapporteurs

Couverture de code

Instantanés

Simulation

Parallélisme

Tests de type

Interface utilisateur de Vitest

Tests in-source

Contexte de test

Annotations de test

Environnement de Test

Étendre les Matchers

Intégrations IDE

Débogage

Erreurs courantes

Guide de migration

Migration vers Vitest 3.0

Migration depuis Jest

Performance

Analyse des performances des tests

Amélioration des performances

Mode Navigateur

API avancée

Comparaison avec d'autres exécuteurs de tests

Sur cette page

Projets de Test ​

Exemple de Projet

GitHub - Essayer en Ligne

WARNING

Cette fonctionnalité était auparavant connue sous le nom d'workspace. L'workspace est déprécié depuis la version 3.2 et a été remplacé par la configuration projects. Leur fonctionnalité est identique.

Vitest permet de définir plusieurs configurations de projet au sein d'un seul processus Vitest. Cette fonctionnalité est particulièrement utile pour les configurations de monorepo, mais peut également être employée pour exécuter des tests avec différentes configurations, telles que resolve.alias, plugins, ou test.browser, entre autres.

Définir des Projets ​

Vous pouvez définir des projets dans votre configuration racine :

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: ['packages/*'],
  },
});

Les configurations de projet peuvent être définies directement dans le fichier, via des fichiers externes ou des modèles glob qui référencent vos projets. Par exemple, si vous avez un dossier nommé packages qui contient vos projets, vous pouvez définir un tableau dans votre configuration Vitest racine :

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: ['packages/*'],
  },
});

Vitest traitera chaque dossier dans packages comme un projet distinct, même s'il ne contient pas de fichier de configuration. Si ce modèle glob correspond à n'importe quel fichier, il sera considéré comme une configuration Vitest, même s'il n'a pas vitest dans son nom ou possède une extension de fichier inhabituelle.

WARNING

Vitest ne considère pas le fichier vitest.config racine comme un projet, à moins qu'il ne soit explicitement spécifié dans la configuration. Par conséquent, la configuration racine n'influencera que les options globales telles que reporters et coverage. Notez que Vitest exécutera toujours certains hooks de plugins, comme apply, config, configResolved ou configureServer, spécifiés dans le fichier de configuration racine. Vitest utilise également les mêmes plugins pour exécuter les configurations de démarrage globales et l'outil de couverture personnalisé.

Vous pouvez également référencer des projets via leurs fichiers de configuration :

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: ['packages/*/vitest.config.{e2e,unit}.ts'],
  },
});

Ce motif n'inclura que les projets dont le fichier vitest.config contient e2e ou unit avant l'extension.

Vous pouvez également définir des projets en utilisant la configuration intégrée. La configuration prend en charge les deux syntaxes simultanément.

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    projects: [
      // cible chaque dossier et fichier à l'intérieur du dossier `packages`
      'packages/*',
      {
        // ajoutez "extends: true" pour hériter des options de la configuration racine
        extends: true,
        test: {
          include: ['tests/**/*.{browser}.test.{ts,js}'],
          // il est recommandé de définir un nom lors de l'utilisation de configurations intégrées
          name: 'happy-dom',
          environment: 'happy-dom',
        },
      },
      {
        test: {
          include: ['tests/**/*.{node}.test.{ts,js}'],
          // la couleur du libellé du nom peut être changée
          name: { label: 'node', color: 'green' },
          environment: 'node',
        },
      },
    ],
  },
});

WARNING

Tous les projets doivent avoir des noms uniques ; sinon, Vitest générera une erreur. Si un nom n'est pas fourni dans la configuration intégrée, Vitest attribuera un numéro. Pour les configurations de projet définies avec la syntaxe de modèle glob, Vitest utilisera par défaut la propriété "name" dans le fichier package.json le plus proche ou, si aucun n'existe, le nom du dossier.

Les projets ne prennent pas en charge toutes les propriétés de configuration. Pour une meilleure sécurité de type, utilisez la méthode defineProject au lieu de defineConfig dans les fichiers de configuration de projet :

ts
// @errors: 2769
import { defineProject } from 'vitest/config';

export default defineProject({
  test: {
    environment: 'jsdom',
    // "reporters" n'est pas pris en charge dans une configuration de projet,
    // ce qui entraînera une erreur
    reporters: ['json'],
  },
});

Exécuter les tests ​

Pour exécuter les tests, définissez un script dans votre package.json racine :

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

Maintenant, les tests peuvent être exécutés en utilisant votre gestionnaire de packages :

bash
npm run test
bash
yarn test
bash
pnpm run test
bash
bun run test

Si vous avez besoin d'exécuter des tests uniquement dans un seul projet, utilisez l'option CLI --project :

bash
npm run test --project e2e
bash
yarn test --project e2e
bash
pnpm run test --project e2e
bash
bun run test --project e2e

TIP

L'option CLI --project peut être utilisée plusieurs fois pour filtrer plusieurs projets :

bash
npm run test --project e2e --project unit
bash
yarn test --project e2e --project unit
bash
pnpm run test --project e2e --project unit
bash
bun run test --project e2e --project unit

Configuration ​

Aucune des options de configuration n'est héritée du fichier de configuration racine par défaut. Vous pouvez créer un fichier de configuration partagé et le fusionner manuellement avec la configuration du projet :

ts
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';

export default mergeConfig(
  configShared,
  defineProject({
    test: {
      environment: 'jsdom',
    },
  })
);

De plus, vous pouvez utiliser l'option extends pour hériter de votre configuration racine. Toutes les options seront fusionnées.

ts
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  test: {
    pool: 'threads',
    projects: [
      {
        // héritera des options de cette configuration, telles que les plugins et le pool
        extends: true,
        test: {
          name: 'unit',
          include: ['**/*.unit.test.ts'],
        },
      },
      {
        // n'héritera d'aucune option de cette configuration
        // (ceci est le comportement par défaut)
        extends: false,
        test: {
          name: 'integration',
          include: ['**/*.integration.test.ts'],
        },
      },
    ],
  },
});

Options non prises en charge

Certaines options de configuration ne sont pas autorisées dans une configuration de projet. Parmi les plus notables :

  • coverage : la couverture s'applique à l'ensemble du processus
  • reporters : seuls les reporters définis au niveau racine sont pris en charge
  • resolveSnapshotPath : seul le résolveur défini au niveau racine est pris en compte
  • toutes les autres options qui n'affectent pas les runners de tests

Toutes les options de configuration non prises en charge dans une configuration de projet sont signalées par un signe * dans le guide "Config". Elles doivent être définies uniquement dans le fichier de configuration racine.

Pager
Page précédenteFiltrage des tests
Page suivanteRapporteurs

Publié sous la licence MIT.

Copyright (c) 2021-Present Vitest Team

https://vitest.dev/guide/projects

Publié sous la licence MIT.

Copyright (c) 2021-Present Vitest Team