In-Source-Testing
Vitest bietet die Möglichkeit, Tests direkt im Quellcode neben der Implementierung auszuführen, ähnlich den Modultests in Rust.
Dadurch können Tests denselben Closure wie die Implementierung nutzen und private Zustände testen, ohne diese explizit exportieren zu müssen. Dies ermöglicht einen schnelleren Feedback-Zyklus während der Entwicklung.
Einrichtung
Um zu beginnen, fügen Sie am Ende Ihrer Quelldatei einen if (import.meta.vitest)
-Block hinzu und schreiben Sie darin Ihre Tests. Zum Beispiel:
// src/index.ts
// Die Implementierung
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// In-Source-Testsuite
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);
});
}
Aktualisieren Sie die includeSource
-Konfiguration in Vitest, um die Dateien im Verzeichnis src/
einzubeziehen:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
Anschließend können Sie die Tests ausführen!
$ npx vitest
Produktions-Build
Für den Produktions-Build müssen Sie die define
-Optionen in Ihrer Konfigurationsdatei setzen, damit der Bundler Dead-Code-Eliminierung durchführen kann. Hier ein Beispiel für Vite:
// vite.config.ts
import { defineConfig } from 'vitest/config'
export default defineConfig({
+ define: {
+ 'import.meta.vitest': 'undefined',
+ },
test: {
includeSource: ['src/**/*.{js,ts}']
},
})
Andere Bundler
unbuild
// build.config.ts
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
+ replace: {
+ 'import.meta.vitest': 'undefined',
+ },
// other options
})
Weitere Informationen: unbuild
rollup
// rollup.config.js
+ import replace from '@rollup/plugin-replace'
export default {
plugins: [
+ replace({
+ 'import.meta.vitest': 'undefined',
+ })
],
// other options
}
Weitere Informationen: rollup
TypeScript
Um TypeScript-Unterstützung für import.meta.vitest
zu erhalten, fügen Sie vitest/importMeta
zu Ihrer tsconfig.json
hinzu:
// tsconfig.json
{
"compilerOptions": {
"types": [
+ "vitest/importMeta"
]
}
}
Ein vollständiges Beispiel finden Sie unter test/import-meta
.
Hinweise
Diese Funktion kann nützlich sein für:
- Unit-Tests für kleine Funktionen oder Hilfsfunktionen
- Prototyping
- Inline-Assertions
Für komplexere Tests, wie z. B. Komponenten- oder E2E-Tests, wird empfohlen, stattdessen separate Testdateien zu verwenden.