Skip to content
Vitest 2
Main Navigation РуководствоAPIКонфигурацияРежим браузераПродвинутый
3.2.0
2.1.9
1.6.1
0.34.6

Русский

English
简体中文
繁體中文
Español
Français
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Русский

English
简体中文
繁體中文
Español
Français
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

Внешний вид

Sidebar Navigation

Настройка конфигурационного файла Vitest

Настройка Vitest

Содержание страницы

Настройка Vitest ​

Чтобы создать файл конфигурации Vitest, следуйте инструкциям. Прежде чем продолжить, убедитесь, что вы понимаете, как работает разрешение конфигурации Vitest.

WARNING

Все перечисленные здесь параметры находятся в свойстве test внутри конфигурации:

ts
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 в браузере.

Этот модуль будет иметь экспорт по умолчанию, равный пути к ресурсу, если не указан запрос.

WARNING

На данный момент эта опция работает только с пулами vmThreads и vmForks.

deps.web.transformCss ​

  • Тип: boolean
  • По умолчанию: true

Должен ли Vitest обрабатывать файлы CSS (.css, .scss, .sass и т. д.) и разрешать их, как это делает Vite в браузере.

Если файлы CSS отключены с помощью опций css, эта опция просто заглушит ошибки ERR_UNKNOWN_FILE_EXTENSION.

WARNING

На данный момент эта опция работает только с пулами vmThreads и vmForks.

deps.web.transformGlobPattern ​

  • Тип: RegExp | RegExp[]
  • По умолчанию: []

Шаблон регулярного выражения для сопоставления внешних файлов, которые должны быть преобразованы.

По умолчанию файлы внутри node_modules являются externalized и не преобразуются, если это не CSS или ресурс, и соответствующая опция не отключена.

WARNING

На данный момент эта опция работает только с пулами vmThreads и vmForks.

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, включите его вместе с любыми другими параметрами:

ts
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 позже.

Например:

sh
# 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.json

benchmark.compare ​

  • Тип: string | undefined
  • По умолчанию: undefined

Путь к файлу предыдущего результата benchmark для сравнения с текущими запусками.

alias ​

  • Тип: Record<string, string> | Array<{ find: string | RegExp, replacement: string, customResolver?: ResolverFunction | ResolverObject }>

Определите пользовательские псевдонимы при запуске внутри тестов. Они будут объединены с псевдонимами из resolve.alias.

WARNING

Vitest использует примитивы Vite SSR для запуска тестов, которые имеют определенные недостатки.

  1. Псевдонимы влияют только на модули, импортированные непосредственно с помощью ключевого слова import встроенным модулем (весь исходный код встроен по умолчанию).
  2. Vitest не поддерживает псевдонимы для вызовов require.
  3. Если вы создаете псевдоним для внешней зависимости (например, react -> preact), рассмотрите возможность создания псевдонима для фактических пакетов в node_modules, чтобы обеспечить корректную работу с externalized зависимостями. И Yarn, и pnpm поддерживают создание псевдонимов через префикс npm:.

globals ​

  • Тип: boolean
  • По умолчанию: false
  • CLI: --globals, --globals=false

По умолчанию vitest не предоставляет глобальные API для большей явности. Если вы предпочитаете использовать API глобально, как Jest, вы можете передать опцию --globals в CLI или добавить globals: true в конфигурацию.

ts
// vitest.config.ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    globals: true,
  },
});

Чтобы TypeScript работал с глобальными API, добавьте vitest/globals в поле types в вашем tsconfig.json.

json
// tsconfig.json
{
  "compilerOptions": {
    "types": ["vitest/globals"]
  }
}

Если вы уже используете unplugin-auto-import в своем проекте, вы также можете использовать его напрямую для автоматического импорта этих API.

ts
// 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 стиль:

js
/**
 * @vitest-environment jsdom
 */

test('use jsdom in this test file', () => {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});

Стиль комментария:

js
// @vitest-environment happy-dom

test('use happy-dom in this test file', () => {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});

Для совместимости с Jest также поддерживается @jest-environment:

js
/**
 * @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:

ts
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 при использовании этой среды:

json
{
  "compilerOptions": {
    "types": ["vitest/jsdom"]
  }
}

environmentOptions ​

  • Тип: Record<'jsdom' | string, unknown>
  • По умолчанию: {}

Параметры, передаваемые в метод setup текущего environment. По умолчанию можно настраивать только параметры JSDOM, если он используется в качестве тестового окружения.

environmentMatchGlobs ​

  • Тип: [string, EnvironmentName][]
  • По умолчанию: []

Автоматическое назначение окружения на основе glob-паттернов. Используется первое совпадение.

Пример:

ts
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-паттернов. Используется первое совпадение.

Пример:

ts
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 по сравнению с тем, который используется в вашем коде:
ts
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.

ts
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.

ts
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.

ts
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.

ts
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, этот файл настройки будет запущен в той же глобальной области видимости несколько раз. Это означает, что перед каждым тестом вы будете получать доступ к одному и тому же глобальному объекту, поэтому убедитесь, что вы не выполняете одни и те же действия несколько раз.

Пример:

ts
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.

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  test: {
    provide: {
      API_KEY: '123',
    },
  },
});
ts
import { expect, inject, test } from 'vitest';

test('api key is defined', () => {
  expect(inject('API_KEY')).toBe('123');
});

WARNING

Свойства должны быть строками, а значения должны быть сериализуемыми, поскольку этот объект будет передаваться между различными процессами.

TIP

Если вы используете TypeScript, вам потребуется расширить тип ProvidedContext для безопасного доступа типов:

ts
// 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:

js
export default function setup({ provide }) {
  provide('wsPort', 3000);
}
ts
import type { GlobalSetupContext } from 'vitest/node';

export default function setup({ provide }: GlobalSetupContext) {
  provide('wsPort', 3000);
}

declare module 'vitest' {
  export interface ProvidedContext {
    wsPort: number;
  }
}
ts
import { inject } from 'vitest';

inject('wsPort') === 3000;

forceRerunTriggers* ​

  • Тип: string[]
  • По умолчанию: ['**/package.json/**', '**/vitest.config.*/**', '**/vite.config.*/**']

Glob-паттерн для путей к файлам, изменение которых приведет к повторному запуску всего набора тестов. В сочетании с аргументом --changed будет запущен весь набор тестов, если триггер будет найден в git diff.

Полезно, если вы тестируете вызов команд CLI, потому что Vite не может построить граф модулей:

ts
test('execute a script', async () => {
  // Vitest не может перезапустить этот тест, если содержимое `dist/index.js` изменится
  await execa('node', ['dist/index.js']);
});

TIP

Убедитесь, что ваши файлы не исключены с помощью server.watch.ignored.

coverage* ​

Вы можете использовать v8, istanbul или пользовательское решение для покрытия для сбора информации о покрытии кода тестами.

Вы можете передать параметры покрытия в CLI с помощью точечной нотации:

sh
npx vitest --coverage.enabled --coverage.provider=istanbul --coverage.all

WARNING

Если вы используете параметры покрытия с точечной нотацией, не забудьте указать --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[]
  • По умолчанию:
js
[
  '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-паттернов.

Этот параметр переопределяет все параметры по умолчанию. Расширьте параметры по умолчанию при добавлении новых шаблонов для игнорирования:

ts
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'],
      ];
    }

Вы также можете передавать кастомные обработчики покрытия. Дополнительную информацию смотрите в Руководстве - Кастомный обработчик покрытия.

ts
{
  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.

ts
{
  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.

ts
{
  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:

ts
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 ​

  • Тип:
ts
{
  statements?: [number, number],
  functions?: [number, number],
  branches?: [number, number],
  lines?: [number, number]
}
  • По умолчанию:
ts
{
  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, остальные будут пропущены.

js
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, safari
  • playwright: firefox, webkit, chromium
  • custom: любая строка, которая будет передана пользовательскому провайдеру.

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 и иметь такую форму:

ts
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.

ts
export default defineConfig({
  test: {
    browser: {
      providerOptions: {
        launch: {
          devtools: true,
        },
      },
    },
  },
});

TIP

Для лучшей типобезопасности при использовании встроенных провайдеров добавьте один из этих типов (для используемого вами провайдера) в поле compilerOptions.types вашего tsconfig:

json
{
  "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. Скрипт должен быть предоставлен в следующей форме:

ts
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__

Переопределяет путь по умолчанию для сохранения снимков. Например, чтобы сохранить снимки рядом с тестовыми файлами:

ts
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:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  cacheDir: 'custom-folder/.vitest',
});

Вы можете ограничить каталог только для Vitest, используя process.env.VITEST:

ts
import { defineConfig } from 'vitest/config';

export default defineConfig({
  cacheDir: process.env.VITEST ? 'custom-folder/.vitest' : undefined,
});

sequence ​

  • Тип: { sequencer?, shuffle?, seed?, hooks?, setupFiles? }

Опции для настройки порядка выполнения тестов.

Вы можете указать опции последовательности через CLI, используя точечную нотацию:

sh
npx vitest --sequence.shuffle --sequence.seed=1000

sequence.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 требует пакет typescript
  • vue-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 не будет выводить лог в консоль.

Может быть полезно для фильтрации логов из сторонних библиотек.

ts
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, но это не фактический экземпляр.

Может быть полезно для фильтрации кадров трассировки стека из сторонних библиотек.

ts
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.

ts
import type { DiffOptions } from 'vitest';
import c from 'tinyrainbow';

export default {
  aIndicator: c.bold('--'),
  bIndicator: c.bold('++'),
  omitAnnotationLines: true,
} satisfies DiffOptions;
ts
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 и использоваться для разрешения и чтения/записи файлов снимков:

ts
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. Это полезно для отладки.

Pager
Предыдущая страницаНастройка конфигурационного файла Vitest

Выпущено на условиях лицензии MIT.

Авторские права (c) 2021-Present Vitest Team

https://v2.vitest.dev/config/

Выпущено на условиях лицензии MIT.

Авторские права (c) 2021-Present Vitest Team