In-source тестирование (Тестирование в исходном коде)
Vitest предоставляет возможность запускать тесты непосредственно в исходном коде, рядом с реализацией, аналогично модульным тестам в Rust.
Это позволяет тестам использовать то же лексическое окружение, что и реализация, и тестировать закрытые состояния без необходимости их экспорта. Кроме того, это обеспечивает более быструю обратную связь в процессе разработки.
Настройка
Для начала добавьте блок if (import.meta.vitest)
в конец вашего исходного файла и напишите несколько тестов внутри него. Например:
// src/index.ts
// реализация
export function add(...args: number[]) {
return args.reduce((a, b) => a + b, 0);
}
// встроенные тесты
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);
});
}
Обновите конфигурацию includeSource
в Vitest, чтобы включить файлы из директории src/
:
// vite.config.ts
/// <reference types="vitest" />
import { defineConfig } from 'vite';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
Теперь можно начинать тестирование!
$ npx vitest
Production build (Сборка для production)
Для production сборки необходимо установить параметр define
в вашем файле конфигурации, чтобы бандлер мог выполнить удаление неиспользуемого кода (tree shaking). Например, в Vite:
// vite.config.ts
/// <reference types="vitest" />
import { defineConfig } from 'vite';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
define: {
'import.meta.vitest': 'undefined',
},
});
Другие сборщики (Bundlers)
unbuild
// build.config.ts
import { defineBuildConfig } from 'unbuild';
export default defineBuildConfig({
replace: {
'import.meta.vitest': 'undefined',
},
// other options
});
Узнайте больше: unbuild
rollup
// rollup.config.js
import replace from '@rollup/plugin-replace';
export default {
plugins: [
replace({
'import.meta.vitest': 'undefined',
}),
],
// other options
};
Узнайте больше: Rollup
TypeScript
Чтобы включить поддержку TypeScript для import.meta.vitest
, добавьте vitest/importMeta
в массив types
в вашем tsconfig.json
:
// tsconfig.json
{
"compilerOptions": {
"types": [
"vitest/importMeta"
]
}
}
Обратитесь к test/import-meta
для получения полного примера.
Заметки
Эта функция может быть полезна для:
- Модульного тестирования небольших функций или утилит
- Быстрого прототипирования
- Встроенных утверждений (assertions)
Для более сложных тестов, таких как тестирование компонентов или сквозное (E2E) тестирование, рекомендуется использовать отдельные файлы.