Test In-Situ
Vitest offre également une manière d’exécuter des tests au sein de votre code source parallèlement à l’implémentation, similaire aux tests de module de Rust.
Cela permet aux tests de partager la même fermeture que les implémentations et de tester des états privés sans exportation. Parallèlement, cela offre également un retour d’information plus rapide pour le développement.
Configuration
Pour commencer, placez un bloc if (import.meta.vitest)
à la fin de votre fichier source et écrivez quelques tests à l’intérieur. Par exemple :
// l'implémentationexport function add(...args: number[]) { return args.reduce((a, b) => a + b, 0)}
// suites de tests en sourceif (import.meta.vitest) { const { it, expect } = import.meta.vitest it('add', () => { expect(add()).toBe(0) expect(add(1)).toBe(1) expect(add(1, 2, 3)).toBe(6) })}
Mettez à jour la configuration includeSource
pour Vitest afin de récupérer les fichiers sous src/
:
/// <reference types="vitest" />import { defineConfig } from 'vite'
export default defineConfig({ test: { includeSource: ['src/**/*.{js,ts}'], // [!code ++] },})
Vous pouvez ensuite commencer à tester !
$ npx vitest
Compilation de Production
Pour la compilation de production, vous devrez définir les options define
dans votre fichier de configuration, permettant au bundler d’effectuer l’élimination du code inutilisé. Par exemple, dans Vite :
/// <reference types="vitest" />import { defineConfig } from 'vite'
export default defineConfig({ test: { includeSource: ['src/**/*.{js,ts}'], }, define: { // [!code ++] 'import.meta.vitest': 'undefined', // [!code ++] }, // [!code ++]})
Autres Bundlers
unbuild
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({ replace: { // [!code ++] 'import.meta.vitest': 'undefined', // [!code ++] }, // [!code ++] // autres options})
En savoir plus : unbuild
Rollup
import replace from '@rollup/plugin-replace' // [!code ++]
export default { plugins: [ replace({ // [!code ++] 'import.meta.vitest': 'undefined', // [!code ++] }) // [!code ++] ], // autres options}
En savoir plus : Rollup
TypeScript
Pour obtenir le support TypeScript pour import.meta.vitest
, ajoutez vitest/importMeta
à votre tsconfig.json
:
{ "compilerOptions": { "types": [ "vitest/importMeta" // [!code ++] ] }}
Référence à examples/in-source-test
pour l’exemple complet.
Remarques
Cette fonctionnalité pourrait être utile pour :
- Tests unitaires pour des fonctions ou utilitaires à portée limitée
- Prototypage
- Assertion intégrée
Il est recommandé d’utiliser des fichiers de test séparés pour des tests plus complexes comme les composants ou les tests E2E.