Tests in-source
Vitest offre la possibilité d'exécuter des tests directement au sein de votre code source, en parallèle de l'implémentation. Cette approche est similaire aux tests de modules de Rust.
Elle permet aux tests de partager le même contexte que les implémentations et de vérifier des états privés sans nécessiter leur exportation. De plus, elle favorise un cycle de rétroaction plus rapide durant le développement.
WARNING
Ce guide explique comment rédiger des tests directement dans votre code source. Si vous préférez écrire vos tests dans des fichiers séparés, veuillez consulter le guide « Écrire des tests » (Writing Tests).
Configuration
Pour commencer, insérez un bloc if (import.meta.vitest)
à la fin de votre fichier source et rédigez-y vos tests. Par exemple :
// L'implémentation
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// Suites de tests in-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
de Vitest pour inclure les fichiers situés dans src/
:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
Vous pouvez ensuite lancer les tests !
$ npx vitest
Construction pour la production
Pour la construction en production, vous devrez définir des options define
dans votre fichier de configuration afin de permettre au bundler d'éliminer le code mort. Par exemple, avec Vite :
/// <reference types="vitest/config" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
define: {
'import.meta.vitest': 'undefined',
},
})
Autres outils de bundling
unbuild
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
replace: {
'import.meta.vitest': 'undefined',
},
// other options
})
Pour en savoir plus : unbuild
Rollup
import replace from '@rollup/plugin-replace'
export default {
plugins: [
replace({
'import.meta.vitest': 'undefined',
})
],
// other options
}
Pour en savoir plus : Rollup
TypeScript
Pour bénéficier du support TypeScript pour import.meta.vitest
, ajoutez vitest/importMeta
à votre tsconfig.json
:
{
"compilerOptions": {
"types": [
"vitest/importMeta"
]
}
}
Consultez examples/in-source-test
pour un exemple complet.
Notes
Cette fonctionnalité peut s'avérer utile pour :
- Les tests unitaires de fonctions ou d'utilitaires à portée limitée.
- Le prototypage.
- Les assertions en ligne.
Il est recommandé d'utiliser des fichiers de test séparés pour des scénarios de test plus complexes, tels que les composants ou les tests E2E.