Тестирование в исходном коде
Vitest предоставляет возможность запускать тесты непосредственно в вашем исходном коде, рядом с реализацией, аналогично модульным тестам Rust.
Это позволяет тестам использовать то же замыкание, что и реализации, и тестировать приватные состояния без их экспорта. При этом обеспечивается более короткий цикл обратной связи в процессе разработки.
WARNING
Это руководство объясняет, как писать тесты внутри вашего исходного кода. Если вам нужно писать тесты в отдельных файлах, следуйте руководству "Написание тестов".
Настройка
Для начала поместите блок if (import.meta.vitest)
в конец вашего исходного файла и напишите внутри него тесты. Например:
// реализация
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/
:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
});
Затем вы можете начать тестирование!
$ npx vitest
Продуктовая сборка
Для продуктовой сборки вам потребуется настроить опции define
в вашем файле конфигурации, чтобы сборщик мог удалить неиспользуемый код. Например, в Vite:
/// <reference types="vitest/config" />
import { defineConfig } from 'vite'
export default defineConfig({
test: {
includeSource: ['src/**/*.{js,ts}'],
},
define: {
'import.meta.vitest': 'undefined',
},
})
Другие сборщики
unbuild
import { defineBuildConfig } from 'unbuild'
export default defineBuildConfig({
replace: {
'import.meta.vitest': 'undefined',
},
// other options
})
Узнать больше: unbuild
Rollup
import replace from '@rollup/plugin-replace'
export default {
plugins: [
replace({
'import.meta.vitest': 'undefined',
})
],
// other options
}
Узнать больше: Rollup
TypeScript
Чтобы получить поддержку TypeScript для import.meta.vitest
, добавьте vitest/importMeta
в ваш tsconfig.json
:
{
"compilerOptions": {
"types": [
"vitest/importMeta"
]
}
}
Полный пример можно найти в examples/in-source-test
.
Примечания
Эта функция может быть полезна для:
- Модульного тестирования небольших функций или утилит
- Прототипирования
- Встроенных проверок
Рекомендуется использовать отдельные файлы тестов для более сложных тестов, например, для компонентов или сквозного тестирования (E2E).