Passer au contenu

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 :

src/index.ts
// l'implémentation
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0)
}
// suites de tests en 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 Vitest afin de récupérer les fichiers sous src/ :

vite.config.ts
/// <reference types="vitest" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'], // [!code ++]
},
})

Vous pouvez ensuite commencer à tester !

Fenêtre de terminal
$ 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 :

vite.config.ts
/// <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
build.config.ts
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
replace: { // [!code ++]
'import.meta.vitest': 'undefined', // [!code ++]
}, // [!code ++]
// autres options
})

En savoir plus : unbuild

Rollup
rollup.config.js
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 :

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.