Testowanie w kodzie źródłowym
Vitest umożliwia uruchamianie testów bezpośrednio w kodzie źródłowym, obok implementacji, podobnie jak testy modułowe w Rust.
Dzięki temu testy współdzielą ten sam zakres (closure) co implementacja i mogą testować stany prywatne bez konieczności ich eksportowania. Dodatkowo, zapewnia to szybsze sprzężenie zwrotne podczas programowania.
Konfiguracja
Aby rozpocząć, dodaj blok if (import.meta.vitest)
na końcu pliku źródłowego i umieść w nim testy. Przykład:
// src/index.ts
// implementacja
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// testy w kodzie źródłowym
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);
});
}
Zaktualizuj konfigurację includeSource
w Vitest, aby uwzględnić pliki w katalogu src/
:
// vite.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
Teraz możesz uruchomić testy!
$ npx vitest
Kompilacja produkcyjna
Podczas kompilacji produkcyjnej należy ustawić opcje define
w pliku konfiguracyjnym, aby bundler mógł usunąć martwy kod (dead code elimination). Na przykład, w Vite:
// vite.config.ts
import { defineConfig } from 'vitest/config'
export default defineConfig({
+ define: {
+ 'import.meta.vitest': 'undefined',
+ },
test: {
includeSource: ['src/**/*.{js,ts}']
},
})
Inne bundlery
unbuild
// build.config.ts
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
+ replace: {
+ 'import.meta.vitest': 'undefined',
+ },
// other options
})
Więcej informacji: unbuild
rollup
// rollup.config.js
+ import replace from '@rollup/plugin-replace'
export default {
plugins: [
+ replace({
+ 'import.meta.vitest': 'undefined',
+ })
],
// other options
}
Więcej informacji: rollup
TypeScript
Aby włączyć obsługę TypeScript dla import.meta.vitest
, dodaj vitest/importMeta
do pliku tsconfig.json
:
// tsconfig.json
{
"compilerOptions": {
"types": [
+ "vitest/importMeta"
]
}
}
Zobacz test/import-meta
dla pełnego przykładu.
Uwagi
Ta funkcja może być przydatna do:
- Testów jednostkowych funkcji lub narzędzi o wąskim zakresie
- Tworzenia prototypów
- Wbudowanych asercji
W przypadku bardziej złożonych testów, takich jak testy komponentów lub testy E2E, zaleca się używanie oddzielnych plików testowych.