Настройка Vitest
Чтобы создать файл конфигурации Vitest, следуйте инструкциям. Прежде чем продолжить, убедитесь, что вы понимаете, как работает разрешение конфигурации Vitest.
WARNING
Все перечисленные здесь параметры находятся в свойстве test внутри конфигурации:
export default defineConfig({
test: {
exclude: [],
},
});TIP
В дополнение к следующим параметрам, вы также можете использовать любой параметр конфигурации из Vite. Например, define для определения глобальных переменных или resolve.alias для определения псевдонимов.
Все параметры конфигурации, которые не поддерживаются внутри конфигурации рабочей области, отмечены значком *.
include
- Тип:
string[] - По умолчанию:
['**/*.{test,spec}.?(c|m)[jt]s?(x)'] - CLI:
vitest [...include],vitest **/*.test.js
Список glob-шаблонов, соответствующих вашим тестовым файлам.
Примечание
При использовании отчетов о покрытии кода Vitest автоматически добавляет шаблоны include для тестовых файлов в шаблоны exclude по умолчанию. Смотрите coverage.exclude.
exclude
- Тип:
string[] - По умолчанию:
['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**', '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*'] - CLI:
vitest --exclude "**/excluded-file"
Список glob-шаблонов, которые следует исключить из поиска тестовых файлов.
WARNING
Этот параметр не влияет на покрытие кода. Если вам нужно исключить определенные файлы из отчета о покрытии, используйте coverage.exclude.
Это единственный параметр, который не переопределяет вашу конфигурацию, если вы передаете его через флаг CLI. Все glob-шаблоны, добавленные с помощью флага --exclude, будут добавлены к массиву exclude в конфигурации.
includeSource
- Тип:
string[] - По умолчанию:
[]
Включает glob-шаблоны для тестовых файлов, расположенных внутри исходного кода.
Когда этот параметр определен, Vitest будет запускать все соответствующие файлы, содержащие import.meta.vitest.
server
- Тип:
{ sourcemap?, deps?, ... }
Параметры сервера Vite-Node.
server.sourcemap
- Тип:
'inline' | boolean - По умолчанию:
'inline'
Внедряет встроенную карту исходного кода в модули.
server.debug
- Тип:
{ dumpModules?, loadDumppedModules? }
Параметры отладчика Vite-Node.
server.debug.dumpModules
- Тип:
boolean | string
Выгрузить преобразованный модуль в файловую систему. Если передана строка, выгрузка будет произведена по указанному пути.
server.debug.loadDumppedModules
- Тип:
boolean
Читать выгруженный модуль из файловой системы, если он существует. Полезно для отладки путем изменения результата выгрузки в файловой системе.
server.deps
- Тип:
{ external?, inline?, ... }
Обработка разрешения зависимостей.
server.deps.external
- Тип:
(string | RegExp)[] - По умолчанию:
[/\/node_modules\//]
Externalize означает, что Vite пропустит обработку пакета и передаст его в нативный Node. Externalized зависимости не будут обрабатываться преобразователями и разрешителями Vite, поэтому они не поддерживают HMR при перезагрузке. По умолчанию все пакеты внутри node_modules являются externalized.
Эти параметры поддерживают имена пакетов, как они указаны в node_modules или в deps.moduleDirectories. Например, пакет @company/some-name, расположенный внутри packages/some-name, должен быть указан как some-name, а packages должен быть включен в deps.moduleDirectories. По сути, Vitest всегда проверяет путь к файлу, а не фактическое имя пакета.
Если используется регулярное выражение, Vitest применяет его к пути к файлу, а не к имени пакета.
server.deps.inline
- Тип:
(string | RegExp)[] | true - По умолчанию:
[]
Vite будет обрабатывать модули, указанные как встроенные. Это может быть полезно для обработки пакетов, которые поставляются с .js в формате ESM (который Node не может обработать).
Если true, каждая зависимость будет встроена в код. Все зависимости, указанные в ssr.noExternal, будут встроены по умолчанию.
server.deps.fallbackCJS
- Тип
boolean - По умолчанию:
false
Когда зависимость является допустимым пакетом ESM, попытайтесь угадать версию CJS на основе пути. Это может быть полезно, если у зависимости неправильный файл ESM.
Это может потенциально вызвать некоторое несоответствие, если пакет имеет разную логику в режимах ESM и CJS.
server.deps.cacheDir
- Тип
string - По умолчанию:
'node_modules/.vite'
Каталог для хранения файлов кеша.
deps
- Тип:
{ optimizer?, ... }
Обработка разрешения зависимостей.
deps.optimizer
- Тип:
{ ssr?, web? } - См. также: Dep Optimization Options (Параметры оптимизации зависимостей)
Включить оптимизацию зависимостей. Если у вас много тестов, это может улучшить их производительность.
Когда Vitest обнаруживает внешнюю библиотеку, указанную в include, она будет объединена в один файл с помощью esbuild и импортирована как единый модуль. Это обеспечивает несколько преимуществ:
- Импорт пакетов, содержащих большое количество импортов, является ресурсоемким. Объединив их в один файл, мы можем сэкономить много времени.
- Импорт библиотек UI является дорогостоящим, потому что они не предназначены для запуска внутри Node.js.
- Ваша конфигурация
aliasтеперь применяется к объединенным пакетам. - Код в ваших тестах выполняется ближе к тому, как он выполняется в браузере.
Имейте в виду, что только пакеты в опции deps.optimizer?.[mode].include объединяются (некоторые плагины заполняют это автоматически, например, Svelte). Вы можете прочитать больше о доступных опциях в документации Vite (Vitest не поддерживает опции disable и noDiscovery). По умолчанию Vitest использует optimizer.web для сред jsdom и happy-dom, и optimizer.ssr для сред node и edge, но это можно настроить с помощью transformMode.
Эти опции также наследуют вашу конфигурацию optimizeDeps (для web Vitest расширит optimizeDeps, для ssr - ssr.optimizeDeps). Если вы переопределите опцию include/exclude в deps.optimizer, она расширит ваш optimizeDeps при запуске тестов. Vitest автоматически удаляет те же опции из include, если они указаны в exclude.
TIP
Вы не сможете редактировать свой код в node_modules для отладки, так как код фактически находится в вашем каталоге cacheDir или test.cache.dir. Если вы хотите отлаживать с помощью операторов console.log, отредактируйте его напрямую или принудительно пересоберите с помощью опции deps.optimizer?.[mode].force.
deps.optimizer.{mode}.enabled
- Тип:
boolean - По умолчанию:
false
Включить оптимизацию зависимостей.
deps.web
- Тип:
{ transformAssets?, ... }
Параметры, которые применяются к внешним файлам, когда режим преобразования установлен в web. По умолчанию jsdom и happy-dom используют режим web, в то время как среды node и edge используют режим преобразования ssr, поэтому эти параметры не повлияют на файлы внутри этих сред.
Обычно файлы внутри node_modules являются externalized, но эти параметры также влияют на файлы в server.deps.external.
deps.web.transformAssets
- Тип:
boolean - По умолчанию:
true
Следует ли Vitest обрабатывать файлы ресурсов (.png, .svg, .jpg и т. д.) и разрешать их так же, как это делает Vite в браузере.
Этот модуль будет иметь экспорт по умолчанию, равный пути к ресурсу, если не указан запрос.
deps.web.transformCss
- Тип:
boolean - По умолчанию:
true
Должен ли Vitest обрабатывать файлы CSS (.css, .scss, .sass и т. д.) и разрешать их, как это делает Vite в браузере.
Если файлы CSS отключены с помощью опций css, эта опция просто заглушит ошибки ERR_UNKNOWN_FILE_EXTENSION.
deps.web.transformGlobPattern
- Тип:
RegExp | RegExp[] - По умолчанию:
[]
Шаблон регулярного выражения для сопоставления внешних файлов, которые должны быть преобразованы.
По умолчанию файлы внутри node_modules являются externalized и не преобразуются, если это не CSS или ресурс, и соответствующая опция не отключена.
deps.interopDefault
- Тип:
boolean - По умолчанию:
true
Интерпретировать default экспорт модуля CJS как именованные экспорты. Некоторые зависимости объединяют только модули CJS и не используют именованные экспорты, которые Node.js может статически анализировать, когда пакет импортируется с использованием синтаксиса import вместо require. При импорте таких зависимостей в среде Node с использованием именованных экспортов вы увидите эту ошибку:
import { read } from 'fs-jetpack';
^^^^
SyntaxError: Named export 'read' not found. The requested module 'fs-jetpack' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export.Vitest не выполняет статический анализ и не может завершиться неудачей до запуска вашего кода, поэтому вы, скорее всего, увидите эту ошибку при запуске тестов, если эта функция отключена:
TypeError: createAsyncThunk is not a function
TypeError: default is not a functionПо умолчанию Vitest предполагает, что вы используете сборщик для обработки этого случая, поэтому не вызывает ошибку, но вы можете отключить это поведение вручную, если ваш код не обрабатывается.
deps.moduleDirectories
- Тип:
string[] - По умолчанию:
['node_modules']
Список каталогов, которые следует рассматривать как каталоги модулей. Этот параметр конфигурации влияет на поведение vi.mock(): когда не предоставлена фабрика и путь к макетируемому модулю соответствует одному из значений moduleDirectories, Vitest попытается найти макет, ища папку __mocks__ в корне проекта.
Этот параметр также повлияет на то, следует ли рассматривать файл как модуль при экстернализации зависимостей. По умолчанию Vitest импортирует внешние модули с помощью нативного Node.js, пропуская шаг преобразования Vite.
Установка этого параметра переопределит значение по умолчанию. Если вы хотите по-прежнему искать пакеты в node_modules, включите его вместе с любыми другими параметрами:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
deps: {
moduleDirectories: ['node_modules', path.resolve('../../packages')],
},
},
});runner
- Тип:
VitestRunnerConstructor - По умолчанию:
nodeпри запуске тестов илиbenchmarkпри запуске бенчмарков
Путь к пользовательскому тестовому runner. Это расширенная функция, и ее следует использовать с пользовательскими runner библиотек. Вы можете прочитать больше об этом в документации.
benchmark
- Тип:
{ include?, exclude?, ... }
Параметры, используемые при запуске vitest bench.
benchmark.include
- Тип:
string[] - По умолчанию:
['**/*.{bench,benchmark}.?(c|m)[jt]s?(x)']
Включить glob-шаблоны для файлов тестов benchmark.
benchmark.exclude
- Тип:
string[] - По умолчанию:
['node_modules', 'dist', '.idea', '.git', '.cache']
Исключить glob-шаблоны для файлов тестов benchmark.
benchmark.includeSource
- Тип:
string[] - По умолчанию:
[]
Включить glob-шаблоны для файлов тестов benchmark внутри исходного кода. Эта опция аналогична includeSource.
Когда этот параметр определен, Vitest будет запускать все соответствующие файлы, содержащие import.meta.vitest.
benchmark.reporters
- Тип:
Arrayable<BenchmarkBuiltinReporters | Reporter> - По умолчанию:
'default'
Пользовательский репортер для вывода. Может содержать одно или несколько встроенных имен отчетов, экземпляров репортеров и/или путей к пользовательским репортерам.
benchmark.outputFile
Устарело. Используйте benchmark.outputJson.
benchmark.outputJson
- Тип:
string | undefined - По умолчанию:
undefined
Путь к файлу для хранения результата benchmark, который можно использовать для опции --compare позже.
Например:
# save main branch's result
git checkout main
vitest bench --outputJson main.json
# change a branch and compare against main
git checkout feature
vitest bench --compare main.jsonbenchmark.compare
- Тип:
string | undefined - По умолчанию:
undefined
Путь к файлу предыдущего результата benchmark для сравнения с текущими запусками.
alias
- Тип:
Record<string, string> | Array<{ find: string | RegExp, replacement: string, customResolver?: ResolverFunction | ResolverObject }>
Определите пользовательские псевдонимы при запуске внутри тестов. Они будут объединены с псевдонимами из resolve.alias.
WARNING
Vitest использует примитивы Vite SSR для запуска тестов, которые имеют определенные недостатки.
- Псевдонимы влияют только на модули, импортированные непосредственно с помощью ключевого слова
importвстроенным модулем (весь исходный код встроен по умолчанию). - Vitest не поддерживает псевдонимы для вызовов
require. - Если вы создаете псевдоним для внешней зависимости (например,
react->preact), рассмотрите возможность создания псевдонима для фактических пакетов вnode_modules, чтобы обеспечить корректную работу с externalized зависимостями. И Yarn, и pnpm поддерживают создание псевдонимов через префиксnpm:.
globals
- Тип:
boolean - По умолчанию:
false - CLI:
--globals,--globals=false
По умолчанию vitest не предоставляет глобальные API для большей явности. Если вы предпочитаете использовать API глобально, как Jest, вы можете передать опцию --globals в CLI или добавить globals: true в конфигурацию.
// vitest.config.ts
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
globals: true,
},
});Чтобы TypeScript работал с глобальными API, добавьте vitest/globals в поле types в вашем tsconfig.json.
// tsconfig.json
{
"compilerOptions": {
"types": ["vitest/globals"]
}
}Если вы уже используете unplugin-auto-import в своем проекте, вы также можете использовать его напрямую для автоматического импорта этих API.
// vitest.config.ts
import { defineConfig } from 'vitest/config';
import AutoImport from 'unplugin-auto-import/vite';
export default defineConfig({
plugins: [
AutoImport({
imports: ['vitest'],
dts: true, // generate TypeScript declaration
}),
],
});environment
- Тип:
'node' | 'jsdom' | 'happy-dom' | 'edge-runtime' | string - По умолчанию:
'node' - CLI:
--environment=<env>
Окружение, используемое для выполнения тестов. По умолчанию Vitest использует окружение Node.js. Для тестирования веб-приложений можно использовать окружения, имитирующие браузер, например, jsdom или happy-dom. Для тестирования edge-функций можно использовать окружение edge-runtime.
TIP
Вы также можете использовать Режим браузера для запуска интеграционных или модульных тестов в браузере без имитации окружения.
Вы можете указать другое окружение для всех тестов в файле, добавив docblock-комментарий @vitest-environment или обычный комментарий в начало файла:
Docblock стиль:
/**
* @vitest-environment jsdom
*/
test('use jsdom in this test file', () => {
const element = document.createElement('div');
expect(element).not.toBeNull();
});Стиль комментария:
// @vitest-environment happy-dom
test('use happy-dom in this test file', () => {
const element = document.createElement('div');
expect(element).not.toBeNull();
});Для совместимости с Jest также поддерживается @jest-environment:
/**
* @jest-environment jsdom
*/
test('use jsdom in this test file', () => {
const element = document.createElement('div');
expect(element).not.toBeNull();
});При запуске Vitest с флагом --isolate=false тесты будут выполняться в следующем порядке: node, jsdom, happy-dom, edge-runtime, custom environments (пользовательские окружения). Это означает, что тесты с одинаковым окружением группируются и выполняются последовательно.
Начиная с версии 0.23.0, можно определять пользовательские окружения (custom environment). При использовании пользовательского окружения Vitest попытается загрузить пакет vitest-environment-${name}. Этот пакет должен экспортировать объект типа Environment:
import type { Environment } from 'vitest';
export default <Environment>{
name: 'custom',
transformMode: 'ssr',
setup() {
// custom setup
return {
teardown() {
// called after all tests with this env have been run
},
};
},
};Vitest также предоставляет builtinEnvironments через точку входа vitest/environments, если вы хотите расширить существующие окружения. Подробнее о расширении окружений можно прочитать в нашем руководстве.
TIP
Среда jsdom предоставляет глобальную переменную jsdom, равную текущему экземпляру JSDOM. Если вы хотите, чтобы TypeScript распознавал ее, вы можете добавить vitest/jsdom в свой tsconfig.json при использовании этой среды:
{
"compilerOptions": {
"types": ["vitest/jsdom"]
}
}environmentOptions
- Тип:
Record<'jsdom' | string, unknown> - По умолчанию:
{}
Параметры, передаваемые в метод setup текущего environment. По умолчанию можно настраивать только параметры JSDOM, если он используется в качестве тестового окружения.
environmentMatchGlobs
- Тип:
[string, EnvironmentName][] - По умолчанию:
[]
Автоматическое назначение окружения на основе glob-паттернов. Используется первое совпадение.
Пример:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
environmentMatchGlobs: [
// все тесты в tests/dom будут запущены в jsdom
['tests/dom/**', 'jsdom'],
// все тесты в tests/ с .edge.test.ts будут запущены в edge-runtime
['**/*.edge.test.ts', 'edge-runtime'],
// ...
],
},
});poolMatchGlobs
- Тип:
[string, 'threads' | 'forks' | 'vmThreads' | 'vmForks' | 'typescript'][] - По умолчанию:
[]
Автоматическое назначение пула для выполнения тестов на основе glob-паттернов. Используется первое совпадение.
Пример:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
poolMatchGlobs: [
// все тесты в каталоге "worker-specific" будут выполняться внутри worker-а, как если бы вы включили для них `--pool=threads`
['**/tests/worker-specific/**', 'threads'],
// запустить все тесты в каталоге "browser" в реальном браузере
['**/tests/browser/**', 'browser'],
// все остальные тесты будут выполняться на основе параметров "browser.enabled" и "threads", если вы не указали другие glob-паттерны
// ...
],
},
});update*
- Тип:
boolean - По умолчанию:
false - CLI:
-u,--update,--update=false
Обновление snapshot-файлов. Обновляет все измененные snapshot-ы и удаляет устаревшие.
watch*
- Тип:
boolean - По умолчанию:
!process.env.CI - CLI:
-w,--watch,--watch=false
Включение режима наблюдения (watch mode).
root
- Тип:
string - CLI:
-r <path>,--root=<path>
Корневая директория проекта.
dir
- Тип:
string - CLI:
--dir=<path> - По умолчанию: то же, что и
root
Базовый каталог для сканирования тестовых файлов. Вы можете указать этот параметр для ускорения обнаружения тестов, если ваш корень охватывает весь проект.
reporters*
- Тип:
Reporter | Reporter[] - По умолчанию:
'default' - CLI:
--reporter=<name>,--reporter=<name1> --reporter=<name2>
Пользовательские репортеры для вывода результатов. Репортеры могут быть экземпляром Reporter, строкой для выбора встроенного репортера или путем к пользовательской реализации (например, './path/to/reporter.ts', '@scope/reporter').
outputFile*
- Тип:
string | Record<string, string> - CLI:
--outputFile=<path>,--outputFile.json=./path
Запись результатов тестов в файл, если также указана опция --reporter=json, --reporter=html или --reporter=junit. Предоставляя объект вместо строки, можно определить отдельные выходные файлы при использовании нескольких репортеров.
pool*
- Тип:
'threads' | 'forks' | 'vmThreads' | 'vmForks' - По умолчанию:
'forks' - CLI:
--pool=threads
Пул, используемый для запуска тестов.
threads*
Включение многопоточности с использованием tinypool (легковесный форк Piscina). При использовании потоков нельзя использовать API, связанные с процессами, такие как process.chdir(). Некоторые библиотеки, написанные на низкоуровневых языках, такие как Prisma, bcrypt и canvas, могут вызывать проблемы при запуске в нескольких потоках и приводить к segfault-ам. В этих случаях рекомендуется использовать пул forks.
forks*
Аналогичен пулу threads, но использует child_process вместо worker_threads через tinypool. Связь между тестами и основным процессом не такая быстрая, как с пулом threads. API, связанные с процессами, такие как process.chdir(), доступны в пуле forks.
vmThreads*
Запуск тестов с использованием VM context (внутри изолированной среды) в пуле threads.
Это ускоряет выполнение тестов, но модуль VM нестабилен при запуске ESM code. Ваши тесты могут вызывать утечки памяти - для борьбы с этим рассмотрите возможность ручного редактирования значения poolOptions.vmThreads.memoryLimit.
WARNING
Запуск кода в песочнице (sandbox) имеет некоторые преимущества (более быстрые тесты), но также сопряжен с рядом недостатков.
- Глобальные переменные внутри низкоуровневых модулей, такие как (
fs,pathи т. д.), отличаются от глобальных переменных, присутствующих в вашей тестовой среде. В результате любая ошибка, выдаваемая этими низкоуровневыми модулями, будет ссылаться на другой конструктор Error по сравнению с тем, который используется в вашем коде:
try {
fs.writeFileSync('/doesnt exist');
} catch (err) {
console.log(err instanceof Error); // false
}- Импорт ES-модулей кэширует их на неопределенный срок, что приводит к утечкам памяти, если у вас много контекстов (файлов тестов). В Node.js нет API, который очищает этот кэш.
- Доступ к глобальным переменным занимает больше времени в среде песочницы.
Пожалуйста, учитывайте эти проблемы при использовании этой опции. Команда Vitest не может исправить ни одну из проблем на нашей стороне.
vmForks*
Аналогичен пулу vmThreads, но использует child_process вместо worker_threads через tinypool. Связь между тестами и основным процессом не такая быстрая, как с пулом vmThreads. API, связанные с процессами, такие как process.chdir(), доступны в пуле vmForks. Пожалуйста, имейте в виду, что этот пул имеет те же недостатки, что и vmThreads.
poolOptions*
- Тип:
Record<'threads' | 'forks' | 'vmThreads' | 'vmForks', {}> - По умолчанию:
{}
poolOptions.threads
Параметры для пула threads.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
poolOptions: {
threads: {
// Threads related options here
},
},
},
});poolOptions.threads.maxThreads*
- Тип:
umber | string - По умолчанию: доступные ЦП
Максимальное количество или процент потоков. Вы также можете использовать переменную окружения VITEST_MAX_THREADS.
poolOptions.threads.minThreads*
- Тип:
umber | string - По умолчанию: доступные ЦП
Минимальное количество или процент потоков. Вы также можете использовать переменную окружения VITEST_MIN_THREADS.
poolOptions.threads.singleThread
- Тип:
boolean - По умолчанию:
false
Запуск всех тестов с одинаковым окружением в одном рабочем потоке. Это отключит встроенную изоляцию модулей (ваш исходный код или встроенный код все равно будет переоцениваться для каждого теста), но может повысить производительность тестов.
WARNING
Несмотря на то, что эта опция заставит тесты выполняться один за другим, она отличается от --runInBand в Jest. Vitest использует workers не только для параллельного запуска тестов, но и для обеспечения изоляции. Отключив эту опцию, ваши тесты будут выполняться последовательно, но в одном и том же глобальном контексте, поэтому вы должны обеспечить изоляцию самостоятельно.
Это может вызвать различные проблемы, если вы полагаетесь на глобальное состояние (фреймворки frontend обычно это делают) или ваш код предполагает, что окружение определено отдельно для каждого теста. Но это может ускорить выполнение тестов (до 3 раз быстрее), которые не зависят от глобального состояния или могут легко обойтись без него.
poolOptions.threads.useAtomics*
- Тип:
boolean - По умолчанию:
false
Использовать Atomics для синхронизации потоков.
Это может повысить производительность в некоторых случаях, но может вызвать segfault в более старых версиях Node.
poolOptions.threads.isolate
- Тип:
boolean - По умолчанию:
true
Изолировать окружение для каждого файла теста.
poolOptions.threads.execArgv*
- Тип:
string[] - По умолчанию:
[]
Передать дополнительные аргументы в node в потоках. См. Command-line API | Node.js для получения дополнительной информации.
WARNING
Будьте осторожны при использовании, так как некоторые параметры могут привести к сбою worker-а, например, --prof, --title. См. https://github.com/nodejs/node/issues/41103.
poolOptions.forks
Параметры для пула forks.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
poolOptions: {
forks: {
// Forks related options here
},
},
},
});poolOptions.forks.maxForks*
- Тип:
number | string - По умолчанию: доступные ЦПУ
Максимальное количество или процент форков.
poolOptions.forks.minForks*
- Тип:
number | string - По умолчанию: доступные ЦПУ
Минимальное количество или процент форков.
poolOptions.forks.isolate
- Тип:
boolean - По умолчанию:
true
Изолировать окружение для каждого файла теста.
poolOptions.forks.singleFork
- Тип:
boolean - По умолчанию:
false
Запуск всех тестов с одинаковым окружением в одном дочернем процессе. Это отключит встроенную изоляцию модулей (ваш исходный код или встроенный код все равно будет переоцениваться для каждого теста), но может повысить производительность тестов.
WARNING
Несмотря на то, что эта опция заставит тесты выполняться один за другим, она отличается от --runInBand в Jest. Vitest использует дочерние процессы не только для параллельного запуска тестов, но и для обеспечения изоляции. Отключив эту опцию, ваши тесты будут выполняться последовательно, но в одном и том же глобальном контексте, поэтому вы должны обеспечить изоляцию самостоятельно.
Это может вызвать различные проблемы, если вы полагаетесь на глобальное состояние (фреймворки frontend обычно это делают) или ваш код предполагает, что окружение определено отдельно для каждого теста. Но это может ускорить выполнение тестов (до 3 раз быстрее), которые не зависят от глобального состояния или могут легко обойтись без него.
poolOptions.forks.execArgv*
- Тип:
string[] - По умолчанию:
[]
Передать дополнительные аргументы в процесс node в дочерних процессах. См. Command-line API | Node.js для получения дополнительной информации.
WARNING
Будьте осторожны при использовании, так как некоторые параметры могут привести к сбою worker-а, например, --prof, --title. См. https://github.com/nodejs/node/issues/41103.
poolOptions.vmThreads
Параметры для пула vmThreads.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
poolOptions: {
vmThreads: {
// VM threads related options here
},
},
},
});poolOptions.vmThreads.maxThreads*
- Тип:
number | string - По умолчанию: доступные CPU
Максимальное количество или процент потоков. Вы также можете использовать переменную окружения VITEST_MAX_THREADS.
poolOptions.vmThreads.minThreads*
- Тип:
number | string - По умолчанию: доступные CPU
Минимальное количество или процент потоков. Вы также можете использовать переменную окружения VITEST_MIN_THREADS.
poolOptions.vmThreads.memoryLimit*
- Тип:
string | number - По умолчанию:
1 / CPU Cores
Указывает предел памяти для worker-ов перед их перезапуском. Это значение сильно зависит от вашей среды, поэтому лучше указать его вручную, чем полагаться на значение по умолчанию.
TIP
Реализация основана на workerIdleMemoryLimit в Jest.
Лимит можно указать несколькими различными способами, и независимо от результата используется Math.floor, чтобы превратить его в целочисленное значение:
<= 1- Предполагается, что значение является процентом от системной памяти. Таким образом, 0,5 устанавливает предел памяти worker-а в половину от общего объема системной памяти.\> 1- Предполагается, что это фиксированное значение в байтах. Из-за предыдущего правила, если вам нужно значение в 1 байт (я не знаю, зачем), вы можете использовать 1,1.С единицами измерения
50%- Как и выше, процент от общего объема системной памяти.100КБ,65МБи т. д. - С единицами измерения для обозначения фиксированного предела памяти.K/KB- Килобайты (x1000)KiB- Кибибайты (x1024)M/MB- МегабайтыMiB- МебибайтыG/GB- ГигабайтыGiB- Гибибайты
WARNING
Ограничение памяти на основе процентов не работает на Linux CircleCI workers из-за неправильного сообщения о системной памяти.
poolOptions.vmThreads.useAtomics*
- Тип:
boolean - По умолчанию:
false
Использовать Atomics для синхронизации потоков.
Это может повысить производительность в некоторых случаях, но может вызвать segfault в более старых версиях Node.
poolOptions.vmThreads.execArgv*
- Тип:
string[] - По умолчанию:
[]
Передать дополнительные аргументы в процесс node в контексте VM. См. Command-line API | Node.js для получения дополнительной информации.
WARNING
Будьте осторожны при использовании, так как некоторые параметры могут привести к сбою worker-а, например, --prof, --title. См. https://github.com/nodejs/node/issues/41103.
poolOptions.vmForks
Параметры для пула vmForks.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
poolOptions: {
vmForks: {
// VM forks related options here
},
},
},
});poolOptions.vmForks.maxForks*
- Тип:
number | string - По умолчанию: доступные CPU
Максимальное количество или процент потоков. Вы также можете использовать переменную окружения VITEST_MAX_FORKS.
poolOptions.vmForks.minForks*
- Тип:
number | string - По умолчанию: доступные CPU
Минимальное количество или процент потоков. Вы также можете использовать переменную окружения VITEST_MIN_FORKS.
poolOptions.vmForks.memoryLimit*
- Тип:
string | number - По умолчанию:
1 / CPU Cores
Указывает предел памяти для worker-ов перед их перезапуском. Это значение сильно зависит от вашей среды, поэтому лучше указать его вручную, чем полагаться на значение по умолчанию. Метод расчета значения описан в poolOptions.vmThreads.memoryLimit
poolOptions.vmForks.execArgv*
- Тип:
string[] - По умолчанию:
[]
Передать дополнительные аргументы в процесс node в контексте VM. См. Command-line API | Node.js для получения дополнительной информации.
WARNING
Будьте осторожны при использовании, так как некоторые параметры могут привести к сбою worker-а, например, --prof, --title. См. https://github.com/nodejs/node/issues/41103.
fileParallelism*
- Тип:
boolean - По умолчанию:
true - CLI:
--no-file-parallelism,--fileParallelism=false
Определяет, следует ли запускать все тестовые файлы параллельно. Если установлено значение false, параметры maxWorkers и minWorkers будут принудительно установлены в значение 1.
TIP
Этот параметр не влияет на тесты, выполняемые в одном файле. Для параллельного запуска тестов внутри файла используйте параметр concurrent в describe или через конфигурацию.
maxWorkers*
- Type:
number | string
Максимальное количество воркеров для запуска тестов. poolOptions.{threads,vmThreads}.maxThreads/poolOptions.forks.maxForks имеет более высокий приоритет.
minWorkers*
- Type:
number | string
Минимальное количество или процент воркеров для запуска тестов. poolOptions.{threads,vmThreads}.minThreads/poolOptions.forks.minForks имеет более высокий приоритет.
testTimeout
- Type:
number - Default:
5_000в Node.js,15_000, еслиbrowser.enabledравноtrue. - CLI:
--test-timeout=5000,--testTimeout=5000
Таймаут теста по умолчанию в миллисекундах.
hookTimeout
- Type:
number - Default:
10_000в Node.js,30_000, еслиbrowser.enabledравноtrue. - CLI:
--hook-timeout=10000,--hookTimeout=10000
Таймаут хука по умолчанию в миллисекундах.
teardownTimeout*
- Тип:
number - По умолчанию:
10000 - CLI:
--teardown-timeout=5000,--teardownTimeout=5000
Время ожидания (timeout) для завершения работы Vitest в миллисекундах.
silent*
- Тип:
boolean - По умолчанию:
false - CLI:
--silent,--silent=false
Отключает вывод в консоль из тестов.
setupFiles
- Тип:
string | string[]
Путь к файлам настройки (setup files). Эти файлы будут выполняться перед каждым тестовым файлом.
INFO
Изменение файла настройки автоматически вызовет перезапуск всех тестов.
Вы можете использовать process.env.VITEST_POOL_ID (строка, представляющая целое число) для идентификации потока, в котором выполняется файл настройки.
TIP
Обратите внимание: если вы используете флаг --isolate=false, этот файл настройки будет запущен в той же глобальной области видимости несколько раз. Это означает, что перед каждым тестом вы будете получать доступ к одному и тому же глобальному объекту, поэтому убедитесь, что вы не выполняете одни и те же действия несколько раз.
Пример:
import { config } from '@some-testing-lib';
if (!globalThis.defined) {
config.plugins = [myCoolPlugin];
computeHeavyThing();
globalThis.defined = true;
}
// Хуки сбрасываются перед каждым набором тестов
afterEach(() => {
cleanup();
});
globalThis.resetBeforeEachTest = true;provide 2.1.0+
- Тип:
Partial<ProvidedContext>
Определите значения, к которым можно получить доступ в тестах с помощью метода inject.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
provide: {
API_KEY: '123',
},
},
});import { expect, inject, test } from 'vitest';
test('api key is defined', () => {
expect(inject('API_KEY')).toBe('123');
});WARNING
Свойства должны быть строками, а значения должны быть сериализуемыми, поскольку этот объект будет передаваться между различными процессами.
TIP
Если вы используете TypeScript, вам потребуется расширить тип ProvidedContext для безопасного доступа типов:
// vitest.shims.d.ts
declare module 'vitest' {
export interface ProvidedContext {
API_KEY: string;
}
}
// mark this file as a module so augmentation works correctly
export {};globalSetup
- Тип:
string | string[]
Путь к глобальным файлам настройки, относительно корня проекта.
Глобальный файл настройки может экспортировать функции с именами setup и teardown или функцию default, которая возвращает функцию teardown (пример).
INFO
Можно использовать несколько глобальных файлов настройки. Функции setup и teardown выполняются последовательно, а teardown - в обратном порядке.
WARNING
Глобальная настройка выполняется только в том случае, если существует хотя бы один запущенный тест. Это означает, что глобальная настройка может начать выполняться в режиме отслеживания после изменения файла теста (файл теста будет ждать завершения глобальной настройки перед запуском).
Имейте в виду, что глобальная настройка выполняется в отдельной глобальной области видимости, поэтому ваши тесты не имеют доступа к переменным, определенным здесь. Однако вы можете передавать сериализуемые данные в тесты с помощью метода provide:
export default function setup({ provide }) {
provide('wsPort', 3000);
}import type { GlobalSetupContext } from 'vitest/node';
export default function setup({ provide }: GlobalSetupContext) {
provide('wsPort', 3000);
}
declare module 'vitest' {
export interface ProvidedContext {
wsPort: number;
}
}import { inject } from 'vitest';
inject('wsPort') === 3000;forceRerunTriggers*
- Тип:
string[] - По умолчанию:
['**/package.json/**', '**/vitest.config.*/**', '**/vite.config.*/**']
Glob-паттерн для путей к файлам, изменение которых приведет к повторному запуску всего набора тестов. В сочетании с аргументом --changed будет запущен весь набор тестов, если триггер будет найден в git diff.
Полезно, если вы тестируете вызов команд CLI, потому что Vite не может построить граф модулей:
test('execute a script', async () => {
// Vitest не может перезапустить этот тест, если содержимое `dist/index.js` изменится
await execa('node', ['dist/index.js']);
});TIP
Убедитесь, что ваши файлы не исключены с помощью server.watch.ignored.
coverage*
Вы можете использовать v8, istanbul или пользовательское решение для покрытия для сбора информации о покрытии кода тестами.
Вы можете передать параметры покрытия в CLI с помощью точечной нотации:
npx vitest --coverage.enabled --coverage.provider=istanbul --coverage.allWARNING
Если вы используете параметры покрытия с точечной нотацией, не забудьте указать --coverage.enabled. Не используйте один параметр --coverage в этом случае.
coverage.provider
- Тип:
'v8' | 'istanbul' | 'custom' - По умолчанию:
'v8' - CLI:
--coverage.provider=<provider>
Указывает провайдера (инструмент) для сбора покрытия кода.
coverage.enabled
- Тип:
boolean - По умолчанию:
false - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.enabled,--coverage.enabled=false
Включает сбор покрытия кода. Может быть переопределен с помощью опции CLI --coverage.
coverage.include
- Тип:
string[] - По умолчанию:
['**'] - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.include=<path>,--coverage.include=<path1> --coverage.include=<path2>
Список файлов, которые должны быть включены в отчет о покрытии, в виде glob-паттернов.
coverage.extension
- Тип:
string | string[] - По умолчанию:
['.js', '.cjs', '.mjs', '.ts', '.mts', '.tsx', '.jsx', '.vue', '.svelte', '.marko', '.astro'] - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.extension=<extension>,--coverage.extension=<extension1> --coverage.extension=<extension2>
Список расширений файлов, которые должны быть включены в отчет о покрытии.
coverage.exclude
- Тип:
string[] - По умолчанию:
[
'coverage/**',
'dist/**',
'**/node_modules/**',
'**/[.]**',
'packages/*/test?(s)/**',
'**/*.d.ts',
'**/virtual:*',
'**/__x00__*',
'**/\x00*',
'cypress/**',
'test?(s)/**',
'test?(-*).?(c|m)[jt]s?(x)',
'**/*{.,-}{test,spec,bench,benchmark}?(-d).?(c|m)[jt]s?(x)',
'**/__tests__/**',
'**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.*',
'**/vitest.{workspace,projects}.[jt]s?(on)',
'**/.{eslint,mocha,prettier}rc.{?(c|m)js,yml}',
];- Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.exclude=<path>,--coverage.exclude=<path1> --coverage.exclude=<path2>
Список файлов, которые должны быть исключены из отчета о покрытии, в виде glob-паттернов.
Этот параметр переопределяет все параметры по умолчанию. Расширьте параметры по умолчанию при добавлении новых шаблонов для игнорирования:
import { coverageConfigDefaults, defineConfig } from 'vitest/config';
export default defineConfig({
test: {
coverage: {
exclude: ['**/custom-pattern/**', ...coverageConfigDefaults.exclude],
},
},
});ПРИМЕЧАНИЕ
Vitest автоматически добавляет шаблоны include для файлов тестов к значению по умолчанию coverage.exclude.
coverage.all
- Тип:
boolean - По умолчанию:
true - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.all,--coverage.all=false
Включать ли все файлы, включая непроверенные, в отчет о покрытии.
coverage.clean
- Тип:
boolean - По умолчанию:
true - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.clean,--coverage.clean=false
Очищать ли результаты предыдущего покрытия перед запуском тестов.
coverage.cleanOnRerun
- Тип:
boolean - По умолчанию:
true - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.cleanOnRerun,--coverage.cleanOnRerun=false
Очистить отчет о покрытии при повторном запуске в режиме наблюдения. Установите значение false, чтобы сохранить результаты покрытия из предыдущего запуска в режиме наблюдения.
coverage.reportsDirectory
- Тип:
string - По умолчанию:
'./coverage' - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.reportsDirectory=<path>
WARNING
Vitest удалит этот каталог перед запуском тестов, если включена опция coverage.clean (значение по умолчанию).
Каталог для записи отчетов о покрытии.
Чтобы просмотреть отчет о покрытии в выходных данных HTML-репортера, этот параметр должен быть установлен как подкаталог каталога HTML-отчета (например, ./html/coverage).
coverage.reporter
- Тип:
string | string[] | [string, {}][] - По умолчанию:
['text', 'html', 'clover', 'json'] - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.reporter=<reporter>,--coverage.reporter=<reporter1> --coverage.reporter=<reporter2>
Репортеры для создания отчетов о покрытии. См. документацию istanbul для получения подробного списка всех репортеров. См. @types/istanbul-reporter для получения подробной информации о параметрах, специфичных для репортера.
Репортер может быть представлен в трех различных формах:
- Одиночный репортер:
{ reporter: 'html' } - Несколько репортеров без опций:
{ reporter: ['html', 'json'] } - Один или несколько репортеров с опциями: ts
{ reporter: [ ['lcov', { projectRoot: './src' }], ['json', { file: 'coverage.json' }], ['text'], ]; }
Вы также можете передавать кастомные обработчики покрытия. Дополнительную информацию смотрите в Руководстве - Кастомный обработчик покрытия.
{
reporter: [
// Specify reporter using name of the NPM package
'@vitest/custom-coverage-reporter',
['@vitest/custom-coverage-reporter', { someOption: true }],
// Specify reporter using local path
'/absolute/path/to/custom-reporter.cjs',
['/absolute/path/to/custom-reporter.cjs', { someOption: true }],
];
}Вы можете проверить отчет о покрытии кода в пользовательском интерфейсе Vitest: см. Покрытие UI Vitest для получения дополнительной информации.
coverage.reportOnFailure
- Тип:
boolean - По умолчанию:
false - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.reportOnFailure,--coverage.reportOnFailure=false
Создавать отчет о покрытии, даже если тесты завершились с ошибками.
coverage.allowExternal
- Тип:
boolean - По умолчанию:
false - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.allowExternal,--coverage.allowExternal=false
Собирать покрытие для файлов, находящихся вне корня проекта (root).
coverage.excludeAfterRemap 2.1.0+
- Тип:
boolean - По умолчанию:
false - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.excludeAfterRemap,--coverage.excludeAfterRemap=false
Применять исключения снова после того, как покрытие было перенесено на исходные источники. Это полезно, когда ваши исходные файлы транспилируются и могут содержать карты исходных кодов несущественных файлов.
Используйте эту опцию, когда вы видите файлы, которые отображаются в отчете, даже если они соответствуют вашим шаблонам coverage.exclude.
coverage.skipFull
- Тип:
boolean - По умолчанию:
false - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.skipFull,--coverage.skipFull=false
Не показывать файлы со 100% покрытием операторов, ветвей и функций.
coverage.thresholds
Настройки порогов покрытия.
coverage.thresholds.lines
- Тип:
number - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.thresholds.lines=<number>
Глобальный порог для покрытия строк кода. См. документацию istanbul для получения дополнительной информации.
coverage.thresholds.functions
- Тип:
number - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.thresholds.functions=<number>
Глобальный порог для покрытия функций. См. документацию istanbul для получения дополнительной информации.
coverage.thresholds.branches
- Тип:
number - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.thresholds.branches=<number>
Глобальный порог для покрытия ветвей кода. См. документацию istanbul для получения дополнительной информации.
coverage.thresholds.statements
- Тип:
number - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.thresholds.statements=<number>
Глобальный порог для покрытия операторов кода. См. документацию istanbul для получения дополнительной информации.
coverage.thresholds.perFile
- Тип:
boolean - По умолчанию:
false - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.thresholds.perFile,--coverage.thresholds.perFile=false
Проверять пороги покрытия для каждого файла отдельно.
coverage.thresholds.autoUpdate
- Тип:
boolean - По умолчанию:
false - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.thresholds.autoUpdate=<boolean>
Автоматически обновлять значения порогов lines, functions, branches и statements в файле конфигурации, когда текущее покрытие превышает установленные пороги. Этот параметр помогает поддерживать актуальность порогов при улучшении покрытия кода.
coverage.thresholds.100
- Тип:
boolean - По умолчанию:
false - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.thresholds.100,--coverage.thresholds.100=false
Устанавливает все глобальные пороги покрытия на 100%. Сокращение для --coverage.thresholds.lines 100 --coverage.thresholds.functions 100 --coverage.thresholds.branches 100 --coverage.thresholds.statements 100.
coverage.thresholds[glob-pattern]
- Тип:
{ statements?: number functions?: number branches?: number lines?: number } - По умолчанию:
undefined - Доступно для провайдеров:
'v8' | 'istanbul'
Устанавливает пороги покрытия для файлов, соответствующих указанному glob-паттерну.
ПРИМЕЧАНИЕ
Vitest учитывает все файлы, включая те, которые подпадают под глоб-шаблоны, при расчете глобальных порогов покрытия. Это отличается от поведения Jest.
{
coverage: {
thresholds: {
// Пороги для всех файлов
functions: 95,
branches: 70,
// Пороги для соответствия glob-паттерну
'src/utils/**.ts': {
statements: 95,
functions: 90,
branches: 85,
lines: 80,
},
// Для файлов, соответствующих этому шаблону, будут установлены только пороги строк.
// Глобальные пороги не наследуются.
'**/math.ts': {
lines: 100,
}
}
}
}coverage.thresholds[glob-pattern].100 2.1.0+
- Тип:
boolean - По умолчанию:
false - Доступно для провайдеров:
'v8' | 'istanbul'
Устанавливает пороговые значения равными 100 для файлов, соответствующих шаблону glob.
{
coverage: {
thresholds: {
// Пороговые значения для всех файлов
functions: 95,
branches: 70,
// Пороговые значения для файлов, соответствующих шаблону glob
'src/utils/**.ts': { 100: true },
'**/math.ts': { 100: true }
}
}
}coverage.ignoreEmptyLines
- Тип:
boolean - По умолчанию:
true(falseв v1) - Доступно для провайдеров:
'v8' - CLI:
--coverage.ignoreEmptyLines=<boolean>
Игнорировать пустые строки, комментарии и другой неисполняемый код, например, типы Typescript.
Этот параметр работает только в том случае, если используемый компилятор удаляет комментарии и другой неисполняемый код из транспилированного кода. По умолчанию Vite использует ESBuild, который удаляет комментарии и типы Typescript из файлов .ts, .tsx и .jsx.
Если вы хотите применить ESBuild и к другим файлам, определите их в параметрах esbuild:
import { defineConfig } from 'vitest/config';
export default defineConfig({
esbuild: {
// Transpile all files with ESBuild to remove comments from code coverage.
// Required for `test.coverage.ignoreEmptyLines` to work:
include: ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.ts', '**/*.tsx'],
},
test: {
coverage: {
provider: 'v8',
ignoreEmptyLines: true,
},
},
});coverage.ignoreClassMethods
- Тип:
string[] - По умолчанию:
[] - Доступно для провайдеров:
'istanbul' - CLI:
--coverage.ignoreClassMethods=<method>
Установите массив имен методов класса, которые следует игнорировать при подсчете покрытия. См. документацию istanbul для получения дополнительной информации.
coverage.watermarks
- Тип:
{
statements?: [number, number],
functions?: [number, number],
branches?: [number, number],
lines?: [number, number]
}- По умолчанию:
{
statements: [50, 80],
functions: [50, 80],
branches: [50, 80],
lines: [50, 80]
}- Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.watermarks.statements=50,80,--coverage.watermarks.branches=50,80
Водяные знаки (watermarks) для операторов, строк, ветвей и функций. См. документацию istanbul для получения дополнительной информации.
coverage.processingConcurrency
- Тип:
boolean - По умолчанию:
Math.min(20, os.availableParallelism?.() ?? os.cpus().length) - Доступно для провайдеров:
'v8' | 'istanbul' - CLI:
--coverage.processingConcurrency=<number>
Предел параллелизма, используемый при обработке результатов покрытия.
coverage.customProviderModule
- Тип:
string - Доступно для провайдеров:
'custom' - CLI:
--coverage.customProviderModule=<path or module name>
Указывает имя модуля или путь к модулю пользовательского провайдера покрытия. См. Руководство - Пользовательский провайдер покрытия для получения дополнительной информации.
testNamePattern*
- Тип:
string | RegExp - CLI:
-t <pattern>,--testNamePattern=<pattern>,--test-name-pattern=<pattern>
Запускает тесты, имена которых соответствуют указанному шаблону.
Если в шаблон добавить OnlyRunThis, будут запущены только тесты, имена которых содержат OnlyRunThis, остальные будут пропущены.
import { expect, test } from 'vitest';
// run
test('OnlyRunThis', () => {
expect(true).toBe(true);
});
// skipped
test('doNotRun', () => {
expect(true).toBe(true);
});open*
- Тип:
boolean - По умолчанию:
!process.env.CI - CLI:
--open,--open=false
Открывает пользовательский интерфейс Vitest (в разработке).
api
- Тип:
boolean | number - По умолчанию:
false - CLI:
--api,--api.port,--api.host,--api.strictPort
Запускает сервер API на указанном порту. Если установлено значение true, используется порт по умолчанию 51204.
browser
- Тип:
{ enabled?, name?, provider?, headless?, api? } - По умолчанию:
{ enabled: false, headless: process.env.CI, api: 63315 } - CLI:
--browser,--browser=<name>,--browser.name=chrome --browser.headless
Запускает тесты Vitest в веб-браузере. По умолчанию используется WebdriverIO, но можно настроить с помощью опции browser.provider.
ПРИМЕЧАНИЕ
Подробнее о тестировании в реальном браузере можно прочитать в руководстве.
WARNING
Это экспериментальная функция. Возможны несовместимые изменения, поэтому рекомендуется зафиксировать версию Vitest при ее использовании.
browser.enabled
- Тип:
boolean - По умолчанию:
false - CLI:
--browser,--browser.enabled=false
Включает запуск тестов в браузере. Может быть переопределено с помощью опции poolMatchGlobs.
browser.name
- Тип:
string - CLI:
--browser=safari
Указывает браузер для запуска тестов. Доступные значения зависят от провайдера:
webdriverio:firefox,chrome,edge,safariplaywright:firefox,webkit,chromiumcustom: любая строка, которая будет передана пользовательскому провайдеру.
browser.headless
- Тип:
boolean - По умолчанию:
process.env.CI - CLI:
--browser.headless,--browser.headless=false
Запускает браузер в режиме headless (без графического интерфейса). Включается по умолчанию при запуске Vitest в CI.
browser.isolate
- Тип:
boolean - По умолчанию:
true - CLI:
--browser.isolate,--browser.isolate=false
Запускает каждый тест в отдельном iframe.
browser.testerHtmlPath
- Тип:
string - По умолчанию:
@vitest/browser/tester.html - Версия: Начиная с Vitest 2.1.4
Путь к HTML-точке входа. Может быть относительным от корня проекта. Этот файл будет обработан с помощью хука transformIndexHtml.
browser.api
- Тип:
number | { port?, strictPort?, host? } - По умолчанию:
63315 - CLI:
--browser.api=63315,--browser.api.port=1234, --browser.api.host=example.com
Настройка параметров для сервера Vite, который обслуживает код в браузере. Не затрагивает опцию test.api. По умолчанию Vitest назначает порт 63315, чтобы избежать конфликтов с сервером разработки, позволяя вам запускать оба параллельно.
browser.provider
- Тип:
'webdriverio' | 'playwright' | 'preview' | string - По умолчанию:
'preview' - CLI:
--browser.provider=playwright
Путь к провайдеру, который будет использоваться при запуске браузерных тестов. Vitest предоставляет три провайдера: preview (по умолчанию), webdriverio и playwright. Пользовательские провайдеры должны быть экспортированы с использованием экспорта default и иметь такую форму:
export interface BrowserProvider {
name: string;
getSupportedBrowsers: () => readonly string[];
initialize: (
ctx: Vitest,
options: { browser: string; options?: BrowserProviderOptions }
) => Awaitable<void>;
openPage: (url: string) => Awaitable<void>;
close: () => Awaitable<void>;
}WARNING
Это расширенный API для авторов библиотек. Если вам просто нужно запустить тесты в браузере, используйте опцию browser.
browser.providerOptions
- Тип:
BrowserProviderOptions
Параметры, передаваемые провайдеру при вызове provider.initialize.
export default defineConfig({
test: {
browser: {
providerOptions: {
launch: {
devtools: true,
},
},
},
},
});TIP
Для лучшей типобезопасности при использовании встроенных провайдеров добавьте один из этих типов (для используемого вами провайдера) в поле compilerOptions.types вашего tsconfig:
{
"compilerOptions": {
"types": [
"@vitest/browser/providers/webdriverio",
"@vitest/browser/providers/playwright"
]
}
}browser.ui
- Тип:
boolean - По умолчанию:
!isCI - CLI:
--browser.ui=false
Следует ли внедрять пользовательский интерфейс Vitest в страницу. По умолчанию внедряет iframe пользовательского интерфейса во время разработки.
browser.viewport
- Тип:
{ width, height } - По умолчанию:
414x896
Размер области просмотра iframe по умолчанию.
browser.locators
Опции для встроенных браузерных локаторов.
browser.locators.testIdAttribute
- Тип:
string - По умолчанию:
data-testid
Атрибут, используемый для поиска элементов с помощью локатора getByTestId.
browser.screenshotDirectory
- Тип:
string - По умолчанию:
__snapshots__в каталоге файла теста
Путь к каталогу снимков относительно root.
browser.screenshotFailures
- Тип:
boolean - По умолчанию:
!browser.ui
Должен ли Vitest делать снимки экрана, если тест не пройден.
browser.orchestratorScripts
- Тип:
BrowserScript[] - По умолчанию:
[]
Пользовательские скрипты, которые должны быть внедрены в orchestrator HTML до инициации test iframes. Этот HTML-документ только настраивает iframes и фактически не импортирует ваш код.
Скрипты src и content будут обработаны плагинами Vite. Скрипт должен быть предоставлен в следующей форме:
export interface BrowserScript {
/**
* Если предоставлен "content" и тип "module", это будет его идентификатор.
*
* Если вы используете TypeScript, вы можете добавить расширение `.ts` здесь, например.
* @default `injected-${index}.js`
*/
id?: string;
/**
* JavaScript-контент для внедрения. Эта строка будет обработана плагинами Vite, если указан тип 'module'.
*
* Вы можете использовать `id`, чтобы дать Vite подсказку о расширении файла.
*/
content?: string;
/**
* Путь к скрипту. Это значение разрешается Vite, поэтому это может быть модуль node или путь к файлу.
*/
src?: string;
/**
* Следует ли загружать скрипт асинхронно.
*/
async?: boolean;
/**
* Тип скрипта.
* @default 'module'
*/
type?: string;
}browser.testerScripts
- Тип:
BrowserScript[] - По умолчанию:
[]
Пользовательские скрипты, которые будут внедрены в HTML-тестер перед инициализацией тестовой среды. Это полезно для внедрения полифиллов, необходимых для работы Vitest в браузере. Рекомендуется использовать setupFiles почти во всех случаях.
Скрипты src и content будут обработаны плагинами Vite.
browser.commands
- Тип:
Record<string, BrowserCommand> - По умолчанию:
{ readFile, writeFile, ... }
Пользовательские команды, которые можно импортировать во время браузерных тестов из @vitest/browser/commands.
clearMocks
- Тип:
boolean - По умолчанию:
false
Вызывает .mockClear() для всех шпионов перед каждым тестом. Очищает историю вызовов моков, но не сбрасывает их реализацию до реализации по умолчанию.
mockReset
- Тип:
boolean - По умолчанию:
false
Вызывает .mockReset() для всех шпионов перед каждым тестом. Очищает историю вызовов моков и сбрасывает их реализацию до пустой функции (возвращает undefined).
restoreMocks
- Тип:
boolean - По умолчанию:
false
Вызывает .mockRestore() для всех шпионов перед каждым тестом. Очищает историю вызовов моков и восстанавливает их исходную реализацию.
unstubEnvs
- Тип:
boolean - По умолчанию:
false
Вызывает vi.unstubAllEnvs перед каждым тестом.
unstubGlobals
- Тип:
boolean - По умолчанию:
false
Вызывает vi.unstubAllGlobals перед каждым тестом.
testTransformMode
- Тип:
{ web?, ssr? }
Определяет способ преобразования модулей, импортируемых в тестах, соответствующих glob-шаблону. По умолчанию зависит от среды. Например, тесты со средой JSDOM будут обрабатывать все файлы с флагом ssr: false, а тесты со средой Node будут обрабатывать все модули с ssr: true.
testTransformMode.ssr
- Тип:
string[] - По умолчанию:
[]
Использует конвейер преобразования SSR для всех модулей внутри указанных тестов. При обработке этих файлов плагины Vite получат флаг ssr: true.
testTransformMode.web
- Тип:
string[] - По умолчанию:
[]
Сначала выполняется обычное преобразование (для браузера), затем SSR-перезапись для запуска кода в Node. Плагины Vite получат флаг ssr: false при обработке этих файлов.
snapshotFormat*
- Тип:
PrettyFormatOptions
Параметры форматирования снепшотов. Эти параметры передаются в pretty-format.
TIP
Обратите внимание, что поле plugins в этом объекте будет проигнорировано.
Для расширения сериализатора снимков с помощью плагинов pretty-format используйте API expect.addSnapshotSerializer или опцию snapshotSerializers.
snapshotSerializers*
- Тип:
string[] - По умолчанию:
[]
Список путей к модулям сериализаторов снимков. Используется для добавления пользовательских сериализаторов снимков. См. Пользовательский сериализатор для получения дополнительной информации.
resolveSnapshotPath*
- Тип:
(testPath: string, snapExtension: string) => string - По умолчанию: сохраняет файлы снимков в каталоге
__snapshots__
Переопределяет путь по умолчанию для сохранения снимков. Например, чтобы сохранить снимки рядом с тестовыми файлами:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
resolveSnapshotPath: (testPath, snapExtension) => testPath + snapExtension,
},
});allowOnly
- Тип:
boolean - По умолчанию:
!process.env.CI - CLI:
--allowOnly,--allowOnly=false
Разрешает запуск тестов и наборов, помеченных как only.
dangerouslyIgnoreUnhandledErrors*
- Тип:
boolean - По умолчанию:
false - CLI:
--dangerouslyIgnoreUnhandledErrors--dangerouslyIgnoreUnhandledErrors=false
Игнорирует необработанные ошибки. Опасно, используйте с осторожностью!
passWithNoTests*
- Тип:
boolean - По умолчанию:
false - CLI:
--passWithNoTests,--passWithNoTests=false
Vitest не будет выдавать ошибку, если не найдено ни одного теста.
logHeapUsage
- Тип:
boolean - По умолчанию:
false - CLI:
--logHeapUsage,--logHeapUsage=false
Выводит информацию об использовании кучи после каждого теста. Полезно для отладки утечек памяти.
css
- Тип:
boolean | { include?, exclude?, modules? }
Настраивает обработку CSS. При исключении CSS-файлы заменяются пустыми строками, чтобы избежать дальнейшей обработки. CSS Modules возвращают прокси, чтобы не влиять на время выполнения.
css.include
- Тип:
RegExp | RegExp[] - По умолчанию:
[]
Регулярное выражение для файлов, которые должны возвращать реальный CSS и будут обработаны конвейером Vite.
TIP
Чтобы обработать все CSS-файлы, используйте /.+/.
css.exclude
- Тип:
RegExp | RegExp[] - По умолчанию:
[]
Регулярное выражение для файлов, которые будут возвращать пустой CSS.
css.modules
- Тип:
{ classNameStrategy? } - По умолчанию:
{}
css.modules.classNameStrategy
- Тип:
'stable' | 'scoped' | 'non-scoped' - По умолчанию:
'stable'
Настраивает область видимости имен классов в CSS-модулях. Доступные варианты:
stable: имена классов генерируются как_${name}_${hashedFilename}. Сгенерированный класс останется прежним, если содержимое CSS изменится, но изменится, если имя файла будет изменено или файл будет перемещен в другую папку. Этот параметр полезен при использовании функции снимков.scoped: имена классов генерируются как обычно, с учетом методаcss.modules.generateScopedName, если он определен и обработка CSS включена. По умолчанию имя файла генерируется как_${name}_${hash}, где хеш включает имя и содержимое файла.non-scoped: имена классов не будут хешированы.
WARNING
По умолчанию Vitest использует прокси, что позволяет обойти обработку CSS Modules. Если вы используете CSS-свойства в классах, необходимо включить обработку CSS с помощью опции include.
maxConcurrency
- Тип:
number - По умолчанию:
5 - CLI:
--max-concurrency=10,--maxConcurrency=10
Определяет максимальное количество тестов, помеченных как test.concurrent, которые могут быть запущены одновременно.
Тесты, превышающие этот лимит, будут поставлены в очередь и выполнены, как только освободится доступный слот.
cache*
- Тип:
false - CLI:
--no-cache,--cache=false
Используйте эту опцию для отключения кэширования результатов тестов. Vitest кэширует результаты, чтобы в первую очередь запускать более длительные и неудачные тесты.
Каталог кеша контролируется опцией cacheDir Vite:
import { defineConfig } from 'vitest/config';
export default defineConfig({
cacheDir: 'custom-folder/.vitest',
});Вы можете ограничить каталог только для Vitest, используя process.env.VITEST:
import { defineConfig } from 'vitest/config';
export default defineConfig({
cacheDir: process.env.VITEST ? 'custom-folder/.vitest' : undefined,
});sequence
- Тип:
{ sequencer?, shuffle?, seed?, hooks?, setupFiles? }
Опции для настройки порядка выполнения тестов.
Вы можете указать опции последовательности через CLI, используя точечную нотацию:
npx vitest --sequence.shuffle --sequence.seed=1000sequence.sequencer*
- Тип:
TestSequencerConstructor - По умолчанию:
BaseSequencer
Пользовательский класс, определяющий методы для сегментирования (шардинга) и сортировки тестов. Вы можете расширить BaseSequencer из vitest/node, если вам нужно переопределить только один из методов sort или shard, но оба метода должны быть реализованы.
Сегментирование выполняется до сортировки и только в том случае, если указана опция --shard.
sequence.shuffle
- Тип:
boolean | { files?, tests? } - По умолчанию:
false - CLI:
--sequence.shuffle,--sequence.shuffle=false
Включает случайный порядок выполнения файлов и тестов. Активируйте эту опцию или используйте аргумент CLI --sequence.shuffle.
Vitest обычно использует кэш для оптимизации порядка выполнения тестов, запуская более длительные тесты раньше, что сокращает общее время выполнения. Случайный порядок выполнения файлов и тестов отключает эту оптимизацию, но может помочь выявить тесты, которые неявно зависят от порядка выполнения.
sequence.shuffle.files
- Тип:
boolean - По умолчанию:
false - CLI:
--sequence.shuffle.files,--sequence.shuffle.files=false
Указывает, следует ли рандомизировать порядок файлов. Обратите внимание, что при включении этой опции оптимизация для запуска долгих тестов раньше отключается.
sequence.shuffle.tests
- Тип:
boolean - По умолчанию:
false - CLI:
--sequence.shuffle.tests,--sequence.shuffle.tests=false
Определяет, следует ли рандомизировать порядок выполнения тестов.
sequence.concurrent
- Тип:
boolean - По умолчанию:
false - CLI:
--sequence.concurrent,--sequence.concurrent=false
Включает параллельное выполнение тестов. Активируйте эту опцию или используйте аргумент CLI --sequence.concurrent.
sequence.seed*
- Тип:
number - По умолчанию:
Date.now() - CLI:
--sequence.seed=1000
Устанавливает начальное значение (seed) для генератора случайных чисел, используемого при рандомизации порядка выполнения тестов.
sequence.hooks
- Тип:
'stack' | 'list' | 'parallel' - По умолчанию:
'parallel' - CLI:
--sequence.hooks=<value>
Изменяет порядок выполнения хуков (hooks).
stack: хуки "after" выполняются в обратном порядке определения, хуки "before" выполняются в порядке определения.list: все хуки выполняются в порядке определения.parallel: хуки в одной группе выполняются параллельно (хуки в родительских наборах тестов по-прежнему выполняются перед хуками текущего набора).
TIP
Эта опция не влияет на onTestFinished. Этот хук всегда вызывается в обратном порядке.
sequence.setupFiles
- Тип:
'list' | 'parallel' - По умолчанию:
'parallel' - CLI:
--sequence.setupFiles=<value>
Изменяет порядок выполнения файлов настройки (setup files).
list: файлы настройки выполняются в порядке определения.parallel: файлы настройки выполняются параллельно.
typecheck
Опции для настройки среды тестирования проверки типов.
typecheck.enabled
- Тип:
boolean - По умолчанию:
false - CLI:
--typecheck,--typecheck.enabled
Включает проверку типов вместе с обычными тестами.
typecheck.only
- Тип:
boolean - По умолчанию:
false - CLI:
--typecheck.only
Запускает только тесты проверки типов, когда проверка типов включена. При использовании CLI эта опция автоматически включает проверку типов.
typecheck.checker
- Тип:
'tsc' | 'vue-tsc' | string - По умолчанию:
tsc
Указывает, какой инструмент использовать для проверки типов. Vitest запускает процесс с определенными параметрами для упрощения разбора, в зависимости от выбранного типа. Checker должен выдавать вывод в том же формате, что и tsc.
Для использования средства проверки типов необходимо установить соответствующий пакет:
tscтребует пакетtypescriptvue-tscтребует пакетvue-tsc
Вы также можете указать путь к пользовательскому исполняемому файлу или имени команды, которая выдает вывод, аналогичный tsc --noEmit --pretty false.
typecheck.include
- Тип:
string[] - По умолчанию:
['**/*.{test,spec}-d.?(c|m)[jt]s?(x)']
Glob-паттерн для файлов, которые следует рассматривать как файлы тестов типов.
typecheck.exclude
- Тип:
string[] - По умолчанию:
['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**']
Glob-паттерн для файлов, которые не следует рассматривать как файлы тестов типов.
typecheck.allowJs
- Тип:
boolean - По умолчанию:
false
Проверять JS-файлы, содержащие комментарий @ts-check. Если эта опция включена в tsconfig, она не будет перезаписана.
typecheck.ignoreSourceErrors
- Тип:
boolean - По умолчанию:
false
Не завершать выполнение тестов с ошибкой, если Vitest обнаружил ошибки за пределами тестовых файлов. При этом ошибки, находящиеся вне тестовых файлов, не будут отображаться.
По умолчанию, если Vitest обнаруживает ошибку в исходном коде, он завершает выполнение набора тестов с ошибкой.
typecheck.tsconfig
- Тип:
string - По умолчанию: пытается найти ближайший tsconfig.json
Путь к пользовательскому файлу tsconfig, относительно корня проекта.
slowTestThreshold*
- Тип:
number - По умолчанию:
300 - CLI:
--slow-test-threshold=<number>,--slowTestThreshold=<number>
Количество миллисекунд, после которого тест или набор тестов считается медленным и сообщается об этом в результатах.
chaiConfig
- Тип:
{ includeStack?, showDiff?, truncateThreshold? } - По умолчанию:
{ includeStack: false, showDiff: true, truncateThreshold: 40 }
Эквивалентно конфигурации Chai.
chaiConfig.includeStack
- Тип:
boolean - По умолчанию:
false
Определяет, будет ли трассировка стека включена в сообщение об ошибке Assertion. Значение false по умолчанию подавляет трассировку стека в сообщении об ошибке.
chaiConfig.showDiff
- Тип:
boolean - По умолчанию:
true
Определяет, следует ли включать флаг showDiff в генерируемые AssertionErrors. Значение false всегда будет false; true будет true, когда утверждение запросило отображение diff.
chaiConfig.truncateThreshold
- Тип:
number - По умолчанию:
40
Устанавливает пороговое значение длины для фактических и ожидаемых значений в ошибках утверждений. Если этот порог превышен (например, для больших структур данных), значение заменяется чем-то вроде [ Array(3) ] или { Object (prop1, prop2) }. Установите значение 0, чтобы полностью отключить усечение.
Эта опция конфигурации влияет на усечение значений в заголовках test.each и внутри сообщения об ошибке утверждения.
bail
- Тип:
number - По умолчанию:
0 - CLI:
--bail=<value>
Прекращает выполнение тестов после указанного количества неудачных тестов.
По умолчанию Vitest запускает все тестовые случаи, даже если некоторые из них завершаются неудачно. Это может быть нежелательно для CI-сборок, где важна только 100% успешная сборка и желательно остановить выполнение тестов как можно раньше при возникновении сбоев. Опция bail позволяет ускорить CI-запуски, предотвращая запуск большего количества тестов при возникновении сбоев.
retry
- Тип:
number - По умолчанию:
0 - CLI:
--retry=<value>
Повторяет тест указанное количество раз, если он завершился неудачно.
onConsoleLog*
- Тип:
(log: string, type: 'stdout' | 'stderr') => boolean | void
Пользовательский обработчик для console.log в тестах. Если функция возвращает false, Vitest не будет выводить лог в консоль.
Может быть полезно для фильтрации логов из сторонних библиотек.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
onConsoleLog(log: string, type: 'stdout' | 'stderr'): boolean | void {
return !(log === 'message from third party library' && type === 'stdout');
},
},
});onStackTrace*
- Тип:
(error: Error, frame: ParsedStack) => boolean | void
Применяет функцию фильтрации к каждому кадру каждой трассировки стека при обработке ошибок. Первый аргумент, error, является объектом с теми же свойствами, что и стандартный Error, но это не фактический экземпляр.
Может быть полезно для фильтрации кадров трассировки стека из сторонних библиотек.
import type { ParsedStack } from 'vitest';
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
onStackTrace(error: Error, { file }: ParsedStack): boolean | void {
// Если мы столкнулись с ReferenceError, показать весь стек.
if (error.name === 'ReferenceError') return;
// Отклонить все кадры из сторонних библиотек.
if (file.includes('node_modules')) return false;
},
},
});diff
- Тип:
string - CLI:
--diff=<value>
Путь к файлу конфигурации diff, который будет использоваться для создания интерфейса diff. Полезно, если требуется настроить отображение diff.
import type { DiffOptions } from 'vitest';
import c from 'tinyrainbow';
export default {
aIndicator: c.bold('--'),
bIndicator: c.bold('++'),
omitAnnotationLines: true,
} satisfies DiffOptions;import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
diff: './vitest.diff.ts',
},
});diff.truncateThreshold
- Тип:
number - По умолчанию:
0
Максимальная длина отображаемого результата diff. Различия, превышающие этот порог, будут усечены. Усечение не применяется при значении по умолчанию 0.
diff.truncateAnnotation
- Тип:
string - По умолчанию:
'... Diff result is truncated'
Аннотация, которая выводится в конце результата diff, если он был усечен.
diff.truncateAnnotationColor
- Тип:
DiffOptionsColor = (arg: string) => string - По умолчанию:
noColor = (string: string): string => string
Цвет аннотации усечения. По умолчанию выводится без цвета.
fakeTimers
- Тип:
FakeTimerInstallOpts
Опции, которые Vitest передаст в @sinon/fake-timers при использовании vi.useFakeTimers().
fakeTimers.now
- Тип:
number | Date - По умолчанию:
Date.now()
Устанавливает фейковые таймеры с указанной Unix epoch (эпохой).
fakeTimers.toFake
- Тип:
('setTimeout' | 'clearTimeout' | 'setImmediate' | 'clearImmediate' | 'setInterval' | 'clearInterval' | 'Date' | 'nextTick' | 'hrtime' | 'requestAnimationFrame' | 'cancelAnimationFrame' | 'requestIdleCallback' | 'cancelIdleCallback' | 'performance' | 'queueMicrotask')[] - По умолчанию:
['setTimeout', 'clearTimeout', 'setImmediate', 'clearImmediate', 'setInterval', 'clearInterval', 'Date']
Массив с именами глобальных методов и API, которые необходимо подменить.
Чтобы подменить только setTimeout() и nextTick(), укажите это свойство как ['setTimeout', 'nextTick'].
Мокирование nextTick не поддерживается при запуске Vitest внутри node:child_process с использованием --pool=forks. NodeJS использует process.nextTick внутри node:child_process и зависает, когда он смокирован. Мокирование nextTick поддерживается при запуске Vitest с --pool=threads.
fakeTimers.loopLimit
- Тип:
number - По умолчанию:
10_000
Максимальное количество таймеров, которые будут запущены при вызове vi.runAllTimers().
fakeTimers.shouldAdvanceTime
- Тип:
boolean - По умолчанию:
false
Указывает @sinonjs/fake-timers автоматически увеличивать поддельное время на основе сдвига реального системного времени (например, смокированное время будет увеличено на 20 мс на каждые 20 мс изменения в реальном системном времени).
fakeTimers.advanceTimeDelta
- Тип:
number - По умолчанию:
20
Актуально только при использовании с shouldAdvanceTime: true. Увеличивает поддельное время на advanceTimeDelta мс на каждые advanceTimeDelta мс изменения в реальном системном времени.
fakeTimers.shouldClearNativeTimers
- Тип:
boolean - По умолчанию:
true
Указывает фиктивным таймерам очищать «нативные» (т. е. нефиктивные) таймеры, делегируя их соответствующим обработчикам. При отключении это может привести к потенциально неожиданному поведению, если таймеры существовали до начала сеанса фиктивных таймеров.
workspace*
- Тип:
string - CLI:
--workspace=./file.js - По умолчанию:
vitest.{workspace,projects}.{js,ts,json}рядом с файлом конфигурации или корнем
Путь к файлу конфигурации рабочей области относительно корня.
isolate
- Тип:
boolean - По умолчанию:
true - CLI:
--no-isolate,--isolate=false
Запускать тесты в изолированной среде. Эта опция не оказывает влияния на пулы vmThreads и vmForks.
Отключение этой опции может улучшить производительность, если ваш код не зависит от побочных эффектов (что обычно верно для проектов со средой node).
TIP
Вы можете отключить изоляцию для определенных пулов, используя свойство poolOptions.
includeTaskLocation
- Тип:
boolean - По умолчанию:
false
Определяет, следует ли включать свойство location, когда Vitest API получает задачи в репортерах. Если у вас много тестов, это может вызвать небольшую регрессию производительности.
Свойство location содержит значения column и line, которые соответствуют позиции test или describe в исходном файле.
Эта опция будет автоматически включена, если вы явно не отключите ее и запускаете Vitest с:
- Vitest UI
- или используете Режим браузера без режима headless
- или используете HTML Reporter
TIP
Эта опция не имеет эффекта, если вы не используете пользовательский код, который зависит от этого.
snapshotEnvironment
- Тип:
string
Путь к пользовательской реализации окружения для работы со снимками (snapshot environment). Это полезно, если вы запускаете тесты в среде, которая не поддерживает Node.js API. Эта опция не оказывает никакого эффекта на браузерный раннер.
Этот объект должен иметь форму SnapshotEnvironment и использоваться для разрешения и чтения/записи файлов снимков:
export interface SnapshotEnvironment {
getVersion: () => string;
getHeader: () => string;
resolvePath: (filepath: string) => Promise<string>;
resolveRawPath: (testPath: string, rawPath: string) => Promise<string>;
saveSnapshotFile: (filepath: string, snapshot: string) => Promise<void>;
readSnapshotFile: (filepath: string) => Promise<string | null>;
removeSnapshotFile: (filepath: string) => Promise<void>;
}Вы можете расширить VitestSnapshotEnvironment по умолчанию из точки входа vitest/snapshot, если вам нужно переопределить только часть API.
WARNING
Это низкоуровневая опция, предназначенная для использования в тех редких случаях, когда недоступны стандартные API Node.js.
Если вам просто нужно настроить функцию работы со снимками, используйте опции snapshotFormat или resolveSnapshotPath.
env
- Тип:
Partial<NodeJS.ProcessEnv>
Переменные окружения, доступные в process.env и import.meta.env во время тестов. Эти переменные не будут доступны в основном процессе (например, в globalSetup).
expect
- Тип:
ExpectOptions
expect.requireAssertions
- Тип:
boolean - По умолчанию:
false
То же самое, что вызов expect.hasAssertions() в начале каждого теста. Это гарантирует, что ни один тест не пройдет случайно.
TIP
Это работает только с expect Vitest. Если вы используете утверждения assert или .should, они не будут учитываться, и ваш тест завершится неудачно из-за отсутствия утверждений expect.
Вы можете изменить это значение, вызвав vi.setConfig({ expect: { requireAssertions: false } }). Конфигурация будет применяться ко всем последующим вызовам expect до тех пор, пока vi.resetConfig не будет вызван вручную.
expect.poll
Глобальные параметры конфигурации для expect.poll. Это те же параметры, которые вы можете передать в expect.poll(condition, options).
expect.poll.interval
- Тип:
number - По умолчанию:
50
Интервал опроса в миллисекундах
expect.poll.timeout
- Тип:
number - По умолчанию:
1000
Таймаут опроса в миллисесекундах
printConsoleTrace
- Тип:
boolean - По умолчанию:
false
Всегда печатать трассировки консоли при вызове любого метода console. Это полезно для отладки.