Расширенный API
WARNING
В этом руководстве описываются продвинутые API для запуска тестов с помощью скрипта Node.js. Если вы просто хотите запустить тесты, вам, вероятно, это не потребуется. Данный API в основном используется авторами библиотек.
Вы можете импортировать любой метод из точки входа vitest/node.
startVitest
function startVitest(
mode: VitestRunMode,
cliFilters: string[] = [],
options: CliOptions = {},
viteOverrides?: ViteUserConfig,
vitestOptions?: VitestOptions
): Promise<Vitest>;Вы можете начать запускать тесты Vitest, используя его Node API:
import { startVitest } from 'vitest/node';
const vitest = await startVitest('test');
await vitest.close();Функция startVitest возвращает экземпляр Vitest при успешном запуске тестов.
Если режим отслеживания изменений не включен, Vitest автоматически вызовет метод close.
Если режим отслеживания изменений включен и терминал поддерживает TTY, Vitest зарегистрирует горячие клавиши в консоли.
Вы можете передать список фильтров вторым аргументом. Vitest будет запускать только тесты, пути к файлам которых содержат хотя бы одну из переданных строк.
Кроме того, вы можете использовать третий аргумент для передачи аргументов командной строки, которые переопределят любые настройки конфигурации тестирования. В качестве альтернативы вы можете передать полную конфигурацию Vite в качестве четвертого аргумента, которая будет иметь приоритет над любыми другими пользовательскими параметрами.
После запуска тестов вы можете извлечь результаты из API state.getTestModules:
import type { TestModule } from 'vitest/node';
const vitest = await startVitest('test');
console.log(vitest.state.getTestModules()); // [TestModule]TIP
В руководстве "Запуск тестов" приведен пример использования.
createVitest
function createVitest(
mode: VitestRunMode,
options: CliOptions,
viteOverrides: ViteUserConfig = {},
vitestOptions: VitestOptions = {}
): Promise<Vitest>;Вы можете создать экземпляр Vitest, используя функцию createVitest. Она возвращает тот же экземпляр Vitest, что и startVitest, но не запускает тесты и не проверяет установленные пакеты.
import { createVitest } from 'vitest/node';
const vitest = await createVitest('test', {
watch: false,
});TIP
В руководстве "Запуск тестов" приведен пример использования.
resolveConfig
function resolveConfig(
options: UserConfig = {},
viteOverrides: ViteUserConfig = {}
): Promise<{
vitestConfig: ResolvedConfig;
viteConfig: ResolvedViteConfig;
}>;Этот метод обрабатывает конфигурацию с пользовательскими параметрами. Если параметры не заданы, root будет process.cwd().
import { resolveConfig } from 'vitest/node';
// vitestConfig содержит только разрешенные свойства "test"
const { vitestConfig, viteConfig } = await resolveConfig({
mode: 'custom',
configFile: false,
resolve: {
conditions: ['custom'],
},
test: {
setupFiles: ['/my-setup-file.js'],
pool: 'threads',
},
});INFO
Из-за того, как работает createServer Vite, Vitest должен разрешать конфигурацию во время хука configResolve плагина. Поэтому этот метод на самом деле не используется внутри и предоставляется исключительно как публичный API.
Если вы передадите конфигурацию в API startVitest или createVitest, Vitest все равно разрешит конфигурацию снова.
WARNING
resolveConfig не разрешает projects. Для разрешения конфигураций проектов Vitest требуется запущенный сервер Vite.
Также обратите внимание, что viteConfig.test не будет полностью разрешен. Если вам нужна конфигурация Vitest, вместо этого используйте vitestConfig.
parseCLI
function parseCLI(
argv: string | string[],
config: CliParseOptions = {}
): {
filter: string[];
options: CliOptions;
};Вы можете использовать этот метод для парсинга аргументов CLI. Он принимает строку (где аргументы разделены одним пробелом) или массив строк аргументов CLI в том же формате, который использует Vitest CLI. Он возвращает фильтр и options, которые вы можете позже передать методам createVitest или startVitest.
import { parseCLI } from 'vitest/node';
const result = parseCLI('vitest ./files.ts --coverage --browser=chrome');
result.options;
// {
// coverage: { enabled: true },
// browser: { name: 'chrome', enabled: true }
// }
result.filter;
// ['./files.ts']