Testy w kodzie źródłowym
Vitest umożliwia uruchamianie testów bezpośrednio w plikach źródłowych, obok implementacji, podobnie jak testy modułów w Ruście.
Takie podejście pozwala testom współdzielić to samo domknięcie co implementacje, umożliwiając testowanie prywatnych stanów bez konieczności ich eksportowania. Dodatkowo, zapewnia to krótszy cykl sprzężenia zwrotnego podczas procesu rozwoju.
WARNING
Ten przewodnik wyjaśnia, jak pisać testy bezpośrednio w kodzie źródłowym. Jeśli potrzebujesz pisać testy w oddzielnych plikach testowych, zapoznaj się z przewodnikiem "Pisanie testów".
Konfiguracja
Aby rozpocząć, umieść blok if (import.meta.vitest)
na końcu pliku źródłowego i napisz w nim swoje testy. Przykład:
// 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
dla Vitest, aby uwzględnić pliki z katalogu src/
:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
Teraz możesz rozpocząć testowanie!
$ npx vitest
Kompilacja produkcyjna
W przypadku kompilacji produkcyjnej, musisz skonfigurować opcje define
w pliku konfiguracyjnym, aby bundler mógł przeprowadzić eliminację martwego kodu (dead code elimination). Na przykład, w Vite:
/// <reference types="vitest/config" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
define: {
'import.meta.vitest': 'undefined',
},
})
Inne bundlery
unbuild
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
replace: {
'import.meta.vitest': 'undefined',
},
// other options
})
Więcej informacji: unbuild
Rollup
import replace from '@rollup/plugin-replace'
export default {
plugins: [
replace({
'import.meta.vitest': 'undefined',
})
],
// other options
}
Więcej informacji: Rollup
TypeScript
Aby uzyskać wsparcie TypeScript dla import.meta.vitest
, dodaj vitest/importMeta
do swojego pliku tsconfig.json
:
{
"compilerOptions": {
"types": [
"vitest/importMeta"
]
}
}
Pełny przykład znajdziesz w examples/in-source-test
.
Uwagi
Ta funkcja może być przydatna do:
- Testowania jednostkowego funkcji lub narzędzi o niewielkim zakresie.
- Prototypowania.
- Asercji inline.
Zaleca się używanie oddzielnych plików testowych dla bardziej złożonych testów, takich jak testy komponentów lub testy E2E.