Tests intégrés au code source
Vitest offre la possibilité d'exécuter des tests directement dans votre code source, à côté de l'implémentation, de manière similaire aux tests de module de Rust.
Cela permet aux tests de partager le même contexte que l'implémentation et de tester des états privés sans avoir à les exporter. De plus, cela accélère le cycle de développement en fournissant un retour d'information plus rapide.
Configuration
Pour commencer, insérez un bloc if (import.meta.vitest)
à la fin de votre fichier source et écrivez quelques tests à l'intérieur. Par exemple :
// src/index.ts
// l'implémentation
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// suites de tests intégrées au code source
if (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 que Vitest inclue les fichiers du répertoire src/
:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
Vous pouvez ensuite lancer les tests !
$ npx vitest
Compilation pour la production
Pour la construction de production, vous devrez définir les options define
dans votre fichier de configuration, permettant au bundler d'effectuer l'élimination du code mort (dead code elimination). Par exemple, dans Vite :
// vite.config.ts
import { defineConfig } from 'vitest/config'
export default defineConfig({
+ define: {
+ 'import.meta.vitest': 'undefined',
+ },
test: {
includeSource: ['src/**/*.{js,ts}']
},
})
Autres Bundlers
unbuild
// build.config.ts
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
+ replace: {
+ 'import.meta.vitest': 'undefined',
+ },
// other options
})
En savoir plus : unbuild
rollup
// rollup.config.js
+ import replace from '@rollup/plugin-replace'
export default {
plugins: [
+ replace({
+ 'import.meta.vitest': 'undefined',
+ })
],
// other options
}
En savoir plus : rollup
TypeScript
Pour activer la prise en charge de TypeScript pour import.meta.vitest
, ajoutez vitest/importMeta
à votre tsconfig.json
:
// tsconfig.json
{
"compilerOptions": {
"types": [
+ "vitest/importMeta"
]
}
}
Voir test/import-meta
pour un exemple complet.
Notes
Cette fonctionnalité est particulièrement utile pour :
- Les tests unitaires de fonctions ou d'utilitaires simples
- Le prototypage rapide
- L'insertion d'assertions directement dans le code (Inline Assertion)
Il est recommandé d'utiliser des fichiers de test séparés pour des tests plus complexes, tels que les tests de composants ou les tests E2E.