Tests im Quellcode
Vitest bietet die Möglichkeit, Tests direkt im Quellcode neben der Implementierung auszuführen, ähnlich den Modultests von Rust.
Dadurch teilen sich die Tests denselben Gültigkeitsbereich wie die Implementierungen und können private Zustände testen, ohne diese explizit exportieren zu müssen. Dies ermöglicht zudem einen schnelleren Feedback-Zyklus während der Entwicklung.
WARNING
Dieser Leitfaden beschreibt, wie Tests innerhalb des Quellcodes geschrieben werden. Wenn Sie Tests in separaten Testdateien schreiben möchten, folgen Sie bitte dem Leitfaden "Tests schreiben".
Einrichtung
Um zu beginnen, fügen Sie am Ende Ihrer Quelldatei einen if (import.meta.vitest)
-Block hinzu und schreiben Sie Ihre Tests darin. Zum Beispiel:
// Die Implementierung
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// In-Source-Testsuiten
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 anschließend die includeSource
-Konfiguration von Vitest, um die Dateien im src/
-Verzeichnis zu erfassen:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
Danach 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 angeben, damit der Bundler die Eliminierung von totem Code (Dead Code Elimination) durchführen kann. Ein Beispiel für Vite:
/// <reference types="vitest/config" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
define: {
'import.meta.vitest': 'undefined',
},
})
Andere Bundler
unbuild
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
replace: {
'import.meta.vitest': 'undefined',
},
// other options
})
Weitere Informationen finden Sie hier: unbuild
Rollup
import replace from '@rollup/plugin-replace'
export default {
plugins: [
replace({
'import.meta.vitest': 'undefined',
})
],
// other options
}
Weitere Informationen finden Sie hier: Rollup
TypeScript
Um die TypeScript-Unterstützung für import.meta.vitest
zu aktivieren, fügen Sie vitest/importMeta
zu Ihrer tsconfig.json
hinzu:
{
"compilerOptions": {
"types": [
"vitest/importMeta"
]
}
}
Ein vollständiges Beispiel finden Sie unter examples/in-source-test
.
Hinweise
Diese Funktion kann nützlich sein für:
- Unit-Tests kleiner Funktionen oder Dienstprogramme
- Prototyping
- Inline-Assertions
Es wird empfohlen, für komplexere Tests wie Komponenten- oder E2E-Tests stattdessen separate Testdateien zu verwenden.