Skip to content
Vitest 3
Main Navigation Руководство & APIКонфигурацияРежим браузераРасширенный 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

API

Справочник по API тестирования

Мок-функции

Vi

expect

expectTypeOf

assert

assertType

Руководство

Интерфейс командной строки

Фильтрация тестов

Тестовые проекты

Средства отчётности

Покрытие кода

Снапшот-тестирование

Мокирование

Параллелизм

Тестирование типов

Vitest UI

Тестирование в исходном коде

Контекст теста

Аннотации тестов

Среда тестирования

Расширение матчеров

Интеграции с IDE

Отладка

Распространенные ошибки

Руководство по миграции

Миграция на Vitest 3.0

Миграция с Jest

Производительность

Профилирование производительности тестов

Улучшение производительности

Режим браузера

Расширенный API

Сравнение с другими тестовыми раннерами

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

Настройка Vitest ​

Если вы используете Vite и у вас есть файл vite.config, Vitest будет использовать его для согласования плагинов и настроек с вашим приложением Vite. Если вам нужна отдельная конфигурация для тестирования или ваше основное приложение не зависит от Vite, вы можете:

  • Создать файл vitest.config.ts, который будет иметь наивысший приоритет и переопределит конфигурацию из vite.config.ts (Vitest поддерживает все стандартные расширения JS и TS, но не поддерживает json). Это означает, что все опции из вашего vite.config будут игнорироваться.
  • Передать опцию --config в CLI, например, vitest --config ./path/to/vitest.config.ts.
  • Использовать process.env.VITEST или свойство mode в defineConfig (будет установлено в test/benchmark, если не переопределено с помощью --mode) для условного применения различных конфигураций в vite.config.ts.

Для настройки самого vitest добавьте свойство test в конфигурацию Vite. Вам также потребуется добавить ссылку на типы Vitest с помощью директивы с тремя слэшами в верхней части вашего файла конфигурации, если вы импортируете defineConfig из самого Vite.

Примеры конфигурации

Используя defineConfig из vite, вы должны следовать этому:

ts
/// <reference types="vitest" />
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    // Здесь можно указать опции.
  },
});

<reference types="vitest" /> перестанет работать в Vitest 4, но вы уже можете начать миграцию на vitest/config:

ts
/// <reference types="vitest/config" />
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    // Здесь можно указать опции.
  },
});

Используя defineConfig из vitest/config, вы должны следовать этому:

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

export default defineConfig({
  test: {
    // Здесь можно указать опции.
  },
});

Вы можете получить опции Vitest по умолчанию, чтобы расширить их при необходимости:

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

export default defineConfig({
  test: {
    exclude: [...configDefaults.exclude, 'packages/template/*'],
  },
});

При использовании отдельного vitest.config.js вы также можете расширить опции Vite из другого файла конфигурации, если это необходимо:

ts
import { defineConfig, mergeConfig } from 'vitest/config';
import viteConfig from './vite.config';

export default mergeConfig(
  viteConfig,
  defineConfig({
    test: {
      exclude: ['packages/template/*'],
    },
  })
);

Если ваша конфигурация Vite определена как функция, вы можете определить конфигурацию следующим образом:

ts
import { defineConfig, mergeConfig } from 'vitest/config';
import viteConfig from './vite.config';

export default defineConfig(configEnv =>
  mergeConfig(
    viteConfig(configEnv),
    defineConfig({
      test: {
        exclude: ['packages/template/*'],
      },
    })
  )
);

WARNING

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

ts
export default defineConfig({
  test: {
    exclude: [],
  },
});

Поскольку Vitest использует конфигурацию Vite, вы также можете использовать любую опцию конфигурации из Vite. Например, define для определения глобальных переменных или resolve.alias для определения псевдонимов — эти опции должны быть определены на верхнем уровне, не внутри свойства test.

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

include ​

  • Тип: string[]
  • По умолчанию: ['**/*.{test,spec}.?(c|m)[jt]s?(x)']
  • CLI: vitest [...include], vitest **/*.test.js

Список глобальных шаблонов, соответствующих вашим тестовым файлам.

ПРИМЕЧАНИЕ

При использовании покрытия кода 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,eslint,prettier}.config.*']
  • CLI: vitest --exclude "**/excluded-file"

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

WARNING

Эта опция не влияет на покрытие кода. Если вам нужно удалить определенные файлы из отчета о покрытии, используйте coverage.exclude.

Это единственная опция, которая не переопределяет вашу конфигурацию, если вы предоставляете ее с флагом CLI. Все глобальные шаблоны, добавленные через флаг --exclude, будут добавлены к exclude конфигурации.

includeSource ​

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

Включить глобальные шаблоны для встроенных тестовых файлов.

При определении Vitest будет запускать все соответствующие файлы с import.meta.vitest внутри.

name ​

  • Тип: string | { label: string, color?: LabelColor }

Назначить пользовательское имя тестовому проекту или процессу Vitest. Имя будет видно в CLI и UI, а также доступно в Node.js API через project.name.

Цвет, используемый CLI и UI, можно изменить, предоставив объект со свойством color.

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\//]

Внешнее означает, что Vite будет передавать пакет напрямую в нативный Node, минуя свою обработку. Внешние зависимости не будут применяться к трансформерам и резолверам Vite, поэтому они не поддерживают HMR при перезагрузке. По умолчанию все пакеты внутри node_modules являются внешними.

Эти опции поддерживают имена пакетов, как они написаны в 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, Vitest попытается определить версию CJS на основе пути. Это может быть полезно, если зависимость имеет неправильный файл ESM.

Это потенциально может привести к несоответствиям, если пакет имеет различную логику в режимах ESM и CJS.

server.deps.cacheDir ​

  • Тип string
  • По умолчанию: 'node_modules/.vite'

Каталог для сохранения файлов кэша.

deps ​

  • Тип: { optimizer?, ... }

Обработка разрешения зависимостей.

deps.optimizer ​

  • Тип: { ssr?, web? }
  • См. также: Опции оптимизации зависимостей

Включить оптимизацию зависимостей. Если у вас много тестов, это может улучшить их производительность.

Когда 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 являются внешними, но эти опции также влияют на файлы в server.deps.external.

deps.web.transformAssets ​

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

Должен ли Vitest обрабатывать файлы ресурсов (.png, .svg, .jpg и т.д.) и разрешать их пути так, как это делает Vite в браузере.

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

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 являются внешними и не преобразуются, если это не CSS или ресурс, и соответствующая опция не отключена.

WARNING

В настоящее время эта опция работает только с пулами vmThreads и vmForks.

deps.interopDefault ​

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

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

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

export default defineConfig({
  test: {
    deps: {
      moduleDirectories: ['node_modules', path.resolve('../../packages')],
    },
  },
});

runner ​

  • Тип: VitestRunnerConstructor
  • По умолчанию: node при запуске тестов или benchmark при запуске бенчмарков

Путь к пользовательскому тестовому раннеру. Это продвинутая функция, и ее следует использовать с пользовательскими библиотечными раннерами. Вы можете прочитать об этом подробнее в документации.

benchmark ​

  • Тип: { include?, exclude?, ... }

Опции, используемые при запуске vitest bench.

benchmark.include ​

  • Тип: string[]
  • По умолчанию: ['**/*.{bench,benchmark}.?(c|m)[jt]s?(x)']

Включить глобальные шаблоны для файлов бенчмарк-тестов.

benchmark.exclude ​

  • Тип: string[]
  • По умолчанию: ['node_modules', 'dist', '.idea', '.git', '.cache']

Исключить глобальные шаблоны для файлов бенчмарк-тестов.

benchmark.includeSource ​

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

Включить глобальные шаблоны для встроенных файлов бенчмарков. Эта опция аналогична includeSource.

При определении Vitest будет запускать все соответствующие файлы с import.meta.vitest внутри.

benchmark.reporters ​

  • Тип: Arrayable<BenchmarkBuiltinReporters | Reporter>
  • По умолчанию: 'default'

Пользовательский репортер для вывода. Может содержать одно или несколько встроенных имен отчетов, экземпляры репортеров и/или пути к пользовательским репортерам.

benchmark.outputFile ​

Устарело в пользу benchmark.outputJson.

benchmark.outputJson ​

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

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

Например:

sh
# сохранить результат основной ветки
git checkout main
vitest bench --outputJson main.json

# сменить ветку и сравнить с основной
git checkout feature
vitest bench --compare main.json

benchmark.compare ​

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

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

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, чтобы это работало для внешних зависимостей. И Yarn, и pnpm поддерживают псевдонимы через префикс npm:.

globals ​

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

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

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

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

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

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

Если вы переопределили свой typeRoots для включения дополнительных типов в вашу компиляцию, вам придется добавить обратно node_modules, чтобы vitest/globals был обнаружен.

json
{
  "compilerOptions": {
    "typeRoots": ["./types", "./node_modules/@types", "./node_modules"],
    "types": ["vitest/globals"]
  }
}

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

ts
import { defineConfig } from 'vitest/config';
import AutoImport from 'unplugin-auto-import/vite';

export default defineConfig({
  plugins: [
    AutoImport({
      imports: ['vitest'],
      dts: true, // генерировать объявление TypeScript
    }),
  ],
});

environment ​

  • Тип: 'node' | 'jsdom' | 'happy-dom' | 'edge-runtime' | string
  • По умолчанию: 'node'
  • CLI: --environment=<env>

Среда, которая будет использоваться для тестирования. Среда по умолчанию в Vitest — это среда Node.js. Если вы создаете веб-приложение, вы можете использовать браузерную среду через jsdom или happy-dom вместо этого.

Если вы создаете граничные функции, вы можете использовать среду edge-runtime

TIP

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

Добавив @vitest-environment docblock или комментарий в начале файла, вы можете указать другую среду для использования во всех тестах в этом файле:

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

Начиная с версии 0.23.0, вы также можете определить пользовательскую среду. Когда используется не встроенная среда, Vitest попытается загрузить пакет vitest-environment-${name}. Этот пакет должен экспортировать объект с формой Environment:

ts
import type { Environment } from 'vitest';

export default <Environment>{
  name: 'custom',
  transformMode: 'ssr',
  setup() {
    // пользовательская настройка
    return {
      teardown() {
        // вызывается после выполнения всех тестов с этой средой
      },
    };
  },
};

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][]
  • По умолчанию: []

УСТАРЕЛО

Этот API был устарел в Vitest 3. Используйте проекты для определения различных конфигураций вместо этого.

ts
export default defineConfig({
  test: {
    environmentMatchGlobs: [ 
      ['./*.jsdom.test.ts', 'jsdom'], 
    ], 
    projects: [ 
      { 
        extends: true, 
        test: { 
          environment: 'jsdom', 
        }, 
      }, 
    ], 
  },
})

Автоматически назначать среду на основе глобальных шаблонов. Будет использоваться первое совпадение.

Например:

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'][]
  • По умолчанию: []

УСТАРЕЛО

Этот API был устарел в Vitest 3. Используйте проекты для определения различных конфигураций вместо этого:

ts
export default defineConfig({
  test: {
    poolMatchGlobs: [ 
      ['./*.threads.test.ts', 'threads'], 
    ], 
    projects: [ 
      { 
        test: { 
          extends: true, 
          pool: 'threads', 
        }, 
      }, 
    ], 
  },
})

Автоматически назначать пул, в котором будут запускаться тесты, на основе глобальных шаблонов. Будет использоваться первое совпадение.

Например:

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

export default defineConfig({
  test: {
    poolMatchGlobs: [
      // все тесты в каталоге "worker-specific" будут запускаться внутри воркера, как если бы вы включили для них `--pool=threads`,
      ['**/tests/worker-specific/**', 'threads'],
      // запускать все тесты в каталоге "browser" в реальном браузере
      ['**/tests/browser/**', 'browser'],
      // все остальные тесты будут запускаться на основе опций "browser.enabled" и "threads", если вы не указали другие глобальные шаблоны
      // ...
    ],
  },
});

update* ​

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

Обновить файлы снимков. Это обновит все измененные снимки и удалит устаревшие.

watch* ​

  • Тип: boolean
  • По умолчанию: !process.env.CI && process.stdin.isTTY
  • CLI: -w, --watch, --watch=false

Включить режим наблюдения.

В интерактивных средах это значение по умолчанию, если только явно не указан --run.

В CI или при запуске из неинтерактивной оболочки режим "watch" не является значением по умолчанию, но может быть явно включен с помощью этого флага.

watchTriggerPatterns 3.2.0+ * ​

  • Тип: WatcherTriggerPattern[]

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

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

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

export default defineConfig({
  test: {
    watchTriggerPatterns: [
      {
        pattern: /^src\/(mailers|templates)\/(.*)\.(ts|html|txt)$/,
        testToRun: (id, match) => {
          // относительно корневого значения
          return `./api/tests/mailers/${match[2]}.test.ts`;
        },
      },
    ],
  },
});

WARNING

Возвращаемые файлы должны быть либо абсолютными, либо относительными к корню. Обратите внимание, что это глобальная опция, и она не может использоваться внутри конфигураций проекта.

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, имеют проблемы при работе в нескольких потоках и сталкиваются с ошибками сегментации. В этих случаях рекомендуется использовать пул forks.

forks* ​

Аналогично пулу threads, но использует child_process вместо worker_threads через tinypool. Связь между тестами и основным процессом не так быстра, как с пулом threads. API, связанные с процессами, такие как process.chdir(), доступны в пуле forks.

vmThreads* ​

Запускать тесты с использованием контекста VM (в изолированной среде) в пуле threads.

Это ускоряет выполнение тестов, но модуль VM нестабилен при запуске кода ESM. Ваши тесты будут вызывать утечки памяти — для борьбы с этим рассмотрите возможность ручного редактирования значения poolOptions.vmThreads.memoryLimit.

WARNING

Запуск кода в песочнице имеет некоторые преимущества (более быстрые тесты), но также сопряжен с рядом недостатков.

  • Глобальные переменные в нативных модулях, например (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: {
        // Опции, связанные с потоками, здесь
      },
    },
  },
});
poolOptions.threads.maxThreads* ​
  • Тип: number | string
  • По умолчанию: доступные ЦП

Максимальное количество или процент потоков. Вы также можете использовать переменную окружения VITEST_MAX_THREADS.

poolOptions.threads.minThreads* ​
  • Тип: number | string
  • По умолчанию: доступные ЦП

Минимальное количество или процент потоков. Вы также можете использовать переменную окружения VITEST_MIN_THREADS.

poolOptions.threads.singleThread ​
  • Тип: boolean
  • По умолчанию: false

Запускать все тесты с одной и той же средой в одном рабочем потоке. Это отключит встроенную изоляцию модулей (ваш исходный код или встроенный код все равно будет переоцениваться для каждого теста), но может улучшить производительность тестов.

WARNING

Несмотря на то, что эта опция заставит тесты запускаться один за другим, она отличается от --runInBand в Jest. Vitest использует воркеры не только для параллельного запуска тестов, но и для обеспечения изоляции. Отключив эту опцию, ваши тесты будут запускаться последовательно, но в одном и том же глобальном контексте, поэтому вы должны обеспечить изоляцию самостоятельно.

Это может вызвать всевозможные проблемы, если вы полагаетесь на глобальное состояние (что обычно делают фронтенд-фреймворки) или ваш код зависит от того, что среда должна быть определена отдельно для каждого теста. Но это может значительно ускорить ваши тесты (до 3 раз), которые не обязательно полагаются на глобальное состояние или могут легко обойти это.

poolOptions.threads.useAtomics* ​
  • Тип: boolean
  • По умолчанию: false

Использовать Atomics для синхронизации потоков.

Это может улучшить производительность в некоторых случаях, но может вызвать ошибку сегментации в старых версиях Node.

poolOptions.threads.isolate ​
  • Type: boolean
  • Default: true

Изолировать среду для каждого тестового файла.

poolOptions.threads.execArgv* ​
  • Тип: string[]
  • По умолчанию: []

Передавать дополнительные аргументы в node в потоках. См. Command-line API | Node.js для получения дополнительной информации.

WARNING

Будьте осторожны при использовании, так как некоторые опции могут привести к аварийному завершению рабочего процесса, например, --prof, --title. См. https://github.com/nodejs/node/issues/41103.

poolOptions.forks ​

Опции для пула forks.

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

export default defineConfig({
  test: {
    poolOptions: {
      forks: {
        // Опции, связанные с форками, здесь
      },
    },
  },
});
poolOptions.forks.maxForks* ​
  • Тип: number | string
  • По умолчанию: доступные ЦП

Максимальное количество или процент форков. Вы также можете использовать переменную окружения VITEST_MAX_FORKS.

poolOptions.forks.minForks* ​
  • Тип: number | string
  • По умолчанию: доступные ЦП

Минимальное количество или процент форков. Вы также можете использовать переменную окружения VITEST_MIN_FORKS.

poolOptions.forks.isolate ​
  • Тип: boolean
  • По умолчанию: true

Изолировать среду для каждого тестового файла.

poolOptions.forks.singleFork ​
  • Тип: boolean
  • По умолчанию: false

Запускать все тесты с одной и той же средой в одном дочернем процессе. Это отключит встроенную изоляцию модулей (ваш исходный код или встроенный код все равно будет переоцениваться для каждого теста), но может улучшить производительность тестов.

WARNING

Несмотря на то, что эта опция заставит тесты запускаться один за другим, она отличается от --runInBand в Jest. Vitest использует дочерние процессы не только для параллельного запуска тестов, но и для обеспечения изоляции. Отключив эту опцию, ваши тесты будут запускаться последовательно, но в одном и том же глобальном контексте, поэтому вы должны обеспечить изоляцию самостоятельно.

Это может вызвать всевозможные проблемы, если вы полагаетесь на глобальное состояние (что обычно делают фронтенд-фреймворки) или ваш код зависит от того, что среда должна быть определена отдельно для каждого теста. Но это может значительно ускорить ваши тесты (до 3 раз), которые не обязательно полагаются на глобальное состояние или могут легко обойти это.

poolOptions.forks.execArgv* ​
  • Тип: string[]
  • По умолчанию: []

Передавать дополнительные аргументы в процесс node в дочерних процессах. См. Command-line API | Node.js для получения дополнительной информации.

WARNING

Будьте осторожны при использовании, так как некоторые опции могут привести к аварийному завершению рабочего процесса, например, --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, здесь
      },
    },
  },
});
poolOptions.vmThreads.maxThreads* ​
  • Тип: number | string
  • По умолчанию: доступные ЦП

Максимальное количество или процент потоков. Вы также можете использовать переменную окружения VITEST_MAX_THREADS.

poolOptions.vmThreads.minThreads* ​
  • Тип: number | string
  • По умолчанию: доступные ЦП

Минимальное количество или процент потоков. Вы также можете использовать переменную окружения VITEST_MIN_THREADS.

poolOptions.vmThreads.memoryLimit* ​
  • Тип: string | number
  • По умолчанию: 1 / CPU Cores

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

TIP

Реализация основана на workerIdleMemoryLimit Jest.

Лимит может быть указан несколькими способами, и независимо от результата используется Math.floor для преобразования его в целое число:

  • <= 1 - Значение считается процентом от системной памяти. Таким образом, 0.5 устанавливает лимит памяти воркера на половину от общей системной памяти.
  • > 1 - Считается фиксированным значением в байтах. Из-за предыдущего правила, если вы хотели значение в 1 байт (не знаю, почему), вы могли бы использовать 1.1.
  • С единицами измерения
    • 50% - Как и выше, процент от общей системной памяти.
    • 100KB, 65MB и т. д. - С единицами измерения для обозначения фиксированного лимита памяти.
      • K / KB - Килобайты (x1000)
      • KiB - Кибибайты (x1024)
      • M / MB - Мегабайты - MiB - Мебибайты
      • G / GB - Гигабайты - GiB - Гибибайты

WARNING

Процентный лимит памяти не работает на Linux CircleCI из-за неправильного сообщения о системной памяти.

poolOptions.vmThreads.useAtomics* ​
  • Тип: boolean
  • По умолчанию: false

Использовать Atomics для синхронизации потоков.

Это может улучшить производительность в некоторых случаях, но может вызвать ошибку сегментации в старых версиях Node.

poolOptions.vmThreads.execArgv* ​
  • Тип: string[]
  • По умолчанию: []

Передавать дополнительные аргументы в процесс node в контексте VM. См. Command-line API | Node.js для получения дополнительной информации.

WARNING

Будьте осторожны при использовании, так как некоторые опции могут привести к аварийному завершению рабочего процесса, например, --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, здесь
      },
    },
  },
});
poolOptions.vmForks.maxForks* ​
  • Тип: number | string
  • По умолчанию: доступные ЦП

Максимальное количество или процент форков. Вы также можете использовать переменную окружения VITEST_MAX_FORKS.

poolOptions.vmForks.minForks* ​
  • Тип: number | string
  • По умолчанию: доступные ЦП

Минимальное количество или процент форков. Вы также можете использовать переменную окружения VITEST_MIN_FORKS.

poolOptions.vmForks.memoryLimit* ​
  • Тип: string | number
  • По умолчанию: 1 / CPU Cores

Указывает предел памяти для воркеров до их перезапуска. Это значение сильно зависит от вашей среды, поэтому лучше указать его вручную, а не полагаться на значение по умолчанию. Как рассчитывается значение, описано в poolOptions.vmThreads.memoryLimit.

poolOptions.vmForks.execArgv* ​
  • Тип: string[]
  • По умолчанию: []

Передавать дополнительные аргументы в процесс node в контексте VM. См. Command-line API | Node.js для получения дополнительной информации.

WARNING

Будьте осторожны при использовании, так как некоторые опции могут привести к аварийному завершению рабочего процесса, например, --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* ​

  • Тип: number | string

Максимальное количество или процент воркеров для запуска тестов. poolOptions.{threads,vmThreads}.maxThreads/poolOptions.forks.maxForks имеет более высокий приоритет.

minWorkers* ​

  • Тип: number | string

Минимальное количество или процент воркеров для запуска тестов. poolOptions.{threads,vmThreads}.minThreads/poolOptions.forks.minForks имеет более высокий приоритет.

testTimeout ​

  • Тип: number
  • По умолчанию: 5_000 в Node.js, 15_000 если browser.enabled равно true
  • CLI: --test-timeout=5000, --testTimeout=5000

Таймаут теста по умолчанию в миллисекундах. Используйте 0 для полного отключения таймаута.

hookTimeout ​

  • Тип: number
  • По умолчанию: 10_000 в Node.js, 30_000 если browser.enabled равно true
  • CLI: --hook-timeout=10000, --hookTimeout=10000

Таймаут хука по умолчанию в миллисекундах. Используйте 0 для полного отключения таймаута.

teardownTimeout* ​

  • Тип: number
  • По умолчанию: 10000
  • CLI: --teardown-timeout=5000, --teardownTimeout=5000

Таймаут по умолчанию для ожидания закрытия при завершении работы Vitest, в миллисекундах.

silent* ​

  • Тип: boolean | 'passed-only'
  • По умолчанию: false
  • CLI: --silent, --silent=false

Подавлять вывод консоли из тестов.

Используйте 'passed-only', чтобы видеть логи только из падающих тестов. Логи из падающих тестов печатаются после завершения теста.

setupFiles ​

  • Тип: string | string[]

Путь к файлам настройки. Они будут запускаться перед каждым тестовым файлом.

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
declare module 'vitest' {
  export interface ProvidedContext {
    API_KEY: string;
  }
}

// пометьте этот файл как модуль, чтобы расширение работало правильно
export {};

globalSetup ​

  • Тип: string | string[]

Путь к файлам глобальной настройки, относительно корня проекта.

Файл глобальной настройки может экспортировать именованные функции setup и teardown или функцию default, которая возвращает функцию teardown (пример).

INFO

Можно использовать несколько файлов globalSetup. setup и teardown выполняются последовательно, при этом teardown выполняется в порядке, обратном их определению.

WARNING

Глобальная настройка запускается только в том случае, если есть хотя бы один выполняющийся тест. Это означает, что глобальная настройка может начать запускаться в режиме наблюдения после изменения тестового файла (тестовый файл будет ждать завершения глобальной настройки перед своим запуском).

Имейте в виду, что глобальная настройка выполняется в другой глобальной области видимости, поэтому ваши тесты не имеют доступа к переменным, определенным здесь. Однако вы можете передавать сериализуемые данные в тесты с помощью метода provide:

ts
import { inject } from 'vitest';

inject('wsPort') === 3000;
ts
import type { TestProject } from 'vitest/node';

export default function setup(project: TestProject) {
  project.provide('wsPort', 3000);
}

declare module 'vitest' {
  export interface ProvidedContext {
    wsPort: number;
  }
}
ts
import type { GlobalSetupContext } from 'vitest/node';

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

declare module 'vitest' {
  export interface ProvidedContext {
    wsPort: number;
  }
}

Начиная с Vitest 3, вы можете определить пользовательскую функцию обратного вызова, которая будет вызываться при повторном запуске тестов Vitest. Если функция асинхронна, раннер будет ждать ее завершения перед выполнением тестов. Обратите внимание, что вы не можете деструктурировать project как { onTestsRerun } потому что это зависит от контекста.

ts
import type { TestProject } from 'vitest/node';

export default function setup(project: TestProject) {
  project.onTestsRerun(async () => {
    await restartDb();
  });
}

forceRerunTriggers* ​

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

Глобальный шаблон путей к файлам, которые инициируют полный перезапуск набора тестов. В сочетании с аргументом --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>

Используйте 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>

Список файлов, включенных в покрытие, заданных глобальными шаблонами.

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>

Список файлов, исключенных из покрытия, заданных глобальными шаблонами.

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

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: [
    // Укажите репортер по имени пакета NPM
    '@vitest/custom-coverage-reporter',
    ['@vitest/custom-coverage-reporter', { someOption: true }],

    // Укажите репортер по локальному пути
    '/absolute/path/to/custom-reporter.cjs',
    ['/absolute/path/to/custom-reporter.cjs', { someOption: true }],
  ];
}

Вы можете проверить свой отчет о покрытии в Vitest UI: см. Vitest UI Coverage для получения более подробной информации.

coverage.reportOnFailure ​

  • Тип: boolean
  • По умолчанию: false
  • Доступно для провайдеров: 'v8' | 'istanbul'
  • CLI: --coverage.reportOnFailure, --coverage.reportOnFailure=false

Генерировать отчет о покрытии, даже если тесты провалились.

coverage.allowExternal ​

  • Тип: boolean
  • По умолчанию: false
  • Доступно для провайдеров: 'v8' | 'istanbul'
  • CLI: --coverage.allowExternal, --coverage.allowExternal=false

Собирает покрытие файлов вне корня проекта.

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 ​

Опции для порогов покрытия.

Если порог установлен на положительное число, он интерпретируется как минимальный требуемый процент покрытия. Например, установка порога строк на 90 означает, что 90% строк должны быть покрыты.

Если порог установлен на отрицательное число, он рассматривается как максимальное допустимое количество непокрытых элементов. Например, установка порога строк на -10 означает, что не более 10 строк могут быть непокрытыми.

ts
{
  coverage: {
    thresholds: {
      // Требует 90% покрытия функций
      functions: 90,

      // Требует, чтобы было покрыто не более 10 строк
      lines: -10,
    }
  }
}
coverage.thresholds.lines ​
  • Тип: number
  • Доступно для провайдеров: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.lines=<number>

Глобальный порог для строк.

coverage.thresholds.functions ​
  • Тип: number
  • Доступно для провайдеров: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.functions=<number>

Глобальный порог для функций.

coverage.thresholds.branches ​
  • Тип: number
  • Доступно для провайдеров: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.branches=<number>

Глобальный порог для ветвей.

coverage.thresholds.statements ​
  • Тип: number
  • Доступно для провайдеров: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.statements=<number>

Глобальный порог для операторов.

coverage.thresholds.perFile ​
  • Тип: boolean
  • По умолчанию: false
  • Доступно для провайдеров: 'v8' | 'istanbul'
  • CLI: --coverage.thresholds.perFile, --coverage.thresholds.perFile=false

Проверяет пороги для каждого файла.

coverage.thresholds.autoUpdate ​
  • Type: boolean
  • Default: false
  • Available for providers: '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'

Устанавливает пороги для файлов, соответствующих глобальному шаблону.

ПРИМЕЧАНИЕ

Vitest учитывает все файлы, включая те, которые соответствуют глобальным шаблонам, в глобальных порогах покрытия. Это отличается от поведения Jest.

ts
{
  coverage: {
    thresholds: {
      // Пороги для всех файлов
      functions: 95,
      branches: 70,

      // Пороги для соответствующего глобального шаблона
      '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 для файлов, соответствующих глобальному шаблону.

ts
{
  coverage: {
    thresholds: {
      // Пороги для всех файлов
      functions: 95,
      branches: 70,

      // Пороги для соответствующего глобального шаблона
      'src/utils/**.ts': { 100: true },
      '**/math.ts': { 100: true }
    }
  }
}

coverage.ignoreEmptyLines ​

  • Тип: boolean
  • По умолчанию: true (false в v1)
  • Доступно для провайдеров: 'v8'
  • CLI: --coverage.ignoreEmptyLines=<boolean>

Игнорировать пустые строки, комментарии и другой неисполняемый код, такие как типы Typescript. Для работы требуется experimentalAstAwareRemapping: false.

Эта опция работает только в том случае, если используемый компилятор удаляет комментарии и другой неисполняемый код из транспилированного кода. По умолчанию Vite использует ESBuild, который удаляет комментарии и типы Typescript из файлов .ts, .tsx и .jsx.

Если вы хотите применить ESBuild и к другим файлам, определите их в опциях esbuild:

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

export default defineConfig({
  esbuild: {
    // Транспилировать все файлы с помощью ESBuild для удаления комментариев, чтобы они не влияли на покрытие кода:
    // Требуется для работы `test.coverage.ignoreEmptyLines`:
    include: ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.ts', '**/*.tsx'],
  },
  test: {
    coverage: {
      provider: 'v8',
      ignoreEmptyLines: true,
    },
  },
});

coverage.experimentalAstAwareRemapping ​

  • Тип: boolean
  • По умолчанию: false
  • Доступно для провайдеров: 'v8'
  • CLI: --coverage.experimentalAstAwareRemapping=<boolean>

Переназначает покрытие с экспериментальным AST-анализом. Обеспечивает более точные результаты по сравнению с режимом по умолчанию.

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

Водяные знаки для операторов, строк, ветвей и функций. См. документацию 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';

// запустить
test('OnlyRunThis', () => {
  expect(true).toBe(true);
});

// пропущенный
test('doNotRun', () => {
  expect(true).toBe(true);
});

open* ​

  • Тип: boolean
  • По умолчанию: !process.env.CI
  • CLI: --open, --open=false

Открыть Vitest UI (в процессе разработки)

api ​

  • Тип: boolean | number
  • По умолчанию: false
  • CLI: --api, --api.port, --api.host, --api.strictPort

Прослушивать порт и предоставлять API. Если установлено в true, порт по умолчанию 51204.

browser экспериментально ​

  • По умолчанию: { enabled: false }
  • CLI: --browser=<name>, --browser.name=chrome --browser.headless

Конфигурация для запуска браузерных тестов. Пожалуйста, обратитесь к статье "Browser Config Reference".

WARNING

Это экспериментальная функция. Ломающие изменения могут не соответствовать SemVer, пожалуйста, закрепите версию Vitest при ее использовании.

clearMocks ​

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

Вызывает .mockClear() для всех шпионов перед каждым тестом. Это очистит историю моков, не изменяя реализации моков.

mockReset ​

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

Вызывает .mockReset() для всех шпионов перед каждым тестом. Это очистит историю моков и восстановит каждую реализацию до ее исходного состояния.

restoreMocks ​

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

Вызывает .mockRestore() для всех шпионов перед каждым тестом. Это очистит историю моков, восстановит каждую реализацию до ее исходного состояния и восстановит исходные дескрипторы объектов, за которыми велось наблюдение.

unstubEnvs ​

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

Вызывает vi.unstubAllEnvs перед каждым тестом.

unstubGlobals ​

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

Вызывает vi.unstubAllGlobals перед каждым тестом.

testTransformMode ​

  • Тип: { web?, ssr? }

Определяет метод преобразования для всех модулей, импортированных внутри теста, если этот тест соответствует глобальному шаблону. По умолчанию зависит от среды. Например, тесты со средой 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, context: { config: SerializedConfig }) => 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 будут возвращать прокси, чтобы не оказывать влияния на время выполнения.

css.include ​

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

Шаблон RegExp для файлов, которые будут возвращать фактический CSS и будут обрабатываться конвейером Vite.

TIP

Для обработки всех файлов CSS используйте /.+/.

css.exclude ​

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

Шаблон RegExp для файлов, которые должны быть заменены пустым файлом CSS.

css.modules ​

  • Тип: { classNameStrategy? }
  • По умолчанию: {}

css.modules.classNameStrategy ​

  • Тип: 'stable' | 'scoped' | 'non-scoped'
  • По умолчанию: 'stable'

Если вы решите обрабатывать файлы CSS, вы можете настроить, должны ли имена классов внутри модулей CSS быть локальными (scoped). Доступны следующие варианты:

  • stable: имена классов будут генерироваться как _${name}_${hashedFilename}, что означает, что сгенерированный класс сохранит свое значение, если содержимое CSS изменится, но изменится, если имя файла будет изменено или файл будет перемещен в другую папку. Эта настройка полезна, если вы используете функцию снимков.
  • scoped: имена классов будут генерироваться как обычно, используя метод css.modules.generateScopedName, если он у вас есть и обработка CSS включена. По умолчанию имя файла будет генерироваться как _${name}_${hash}, где хеш включает имя файла и содержимое файла.
  • non-scoped: имена классов не будут хешироваться.

WARNING

По умолчанию Vitest экспортирует прокси, минуя обработку модулей CSS. Если вы полагаетесь на свойства CSS в своих классах, вам необходимо включить обработку CSS с помощью опции include.

maxConcurrency ​

  • Тип: number
  • По умолчанию: 5
  • CLI: --max-concurrency=10, --maxConcurrency=10

Количество тестов, которые разрешено запускать одновременно, помеченных test.concurrent.

Тесты, превышающие этот лимит, будут ожидать в очереди запуска, когда появится свободный слот.

cache* ​

  • Тип: false
  • CLI: --no-cache, --cache=false

Используйте эту опцию, если вы хотите отключить функцию кэширования. В настоящее время Vitest кэширует результаты тестов, чтобы сначала запускать более длительные и неудачные тесты.

Каталог кэша контролируется опцией Vite cacheDir:

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?, groupOrder }

Опции, определяющие порядок сортировки тестов.

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

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

sequence.sequencer* ​

  • Тип: TestSequencerConstructor
  • По умолчанию: BaseSequencer

Пользовательский класс, определяющий методы для шардирования и сортировки. Вы можете расширить BaseSequencer из vitest/node, если вам нужно переопределить только один из методов sort и shard, однако оба метода должны быть реализованы.

Шардирование происходит до сортировки, и только если предоставлена опция --shard.

Если указан sequencer.groupOrder, секвенсор будет вызываться один раз для каждой группы и пула.

groupOrder 3.2.0+ ​

  • Тип: number
  • По умолчанию: 0

Контролирует порядок, в котором этот проект запускает свои тесты при использовании нескольких проектов.

  • Проекты с одинаковым номером порядка группы будут запускаться вместе, и группы запускаются от наименьшего к наибольшему.
  • Если вы не установите эту опцию, все проекты запустятся параллельно.
  • Если несколько проектов используют один и тот же порядок группы, они будут запускаться одновременно.

Эта настройка влияет только на порядок запуска проектов, а не на порядок тестов внутри проекта. Чтобы контролировать изоляцию тестов или порядок тестов внутри проекта, используйте опции isolate и sequence.sequencer.

Пример

Рассмотрим этот пример:

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

export default defineConfig({
  test: {
    projects: [
      {
        test: {
          name: 'slow',
          sequence: {
            groupOrder: 0,
          },
        },
      },
      {
        test: {
          name: 'fast',
          sequence: {
            groupOrder: 0,
          },
        },
      },
      {
        test: {
          name: 'flaky',
          sequence: {
            groupOrder: 1,
          },
        },
      },
    ],
  },
});

Тесты в этих проектах будут запускаться в следующем порядке:

 0. slow  |
          |> запускаются вместе
 0. fast  |

 1. flaky |> запускается после slow и fast в одиночку

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

Устанавливает начальное значение для рандомизации, если тесты запускаются в случайном порядке.

sequence.hooks ​

  • Тип: 'stack' | 'list' | 'parallel'
  • По умолчанию: 'stack'
  • CLI: --sequence.hooks=<value>

Изменяет порядок, в котором выполняются хуки.

  • stack будет упорядочивать хуки "after" в обратном порядке, хуки "before" будут выполняться в том порядке, в котором они были определены.
  • list упорядочивает все хуки в том порядке, в котором они определены.
  • parallel запускает хуки в одной группе параллельно (хуки в родительских наборах все равно выполнятся до хуков текущего набора).

TIP

Эта опция не влияет на onTestFinished. Она всегда вызывается в обратном порядке.

sequence.setupFiles ​

  • Тип: 'list' | 'parallel'
  • По умолчанию: 'parallel'
  • CLI: --sequence.setupFiles=<value>

Изменяет порядок, в котором выполняются файлы настройки.

  • 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 запустит процесс с определенными параметрами, чтобы облегчить парсинг вывода, в зависимости от типа. Проверяющий должен выдавать тот же формат вывода, что и tsc.

Для использования проверки типов необходимо установить пакет:

  • tsc требует пакет typescript
  • vue-tsc требует пакет vue-tsc

Вы также можете передать путь к пользовательскому бинарному файлу или имя команды, которая производит тот же вывод, что и tsc --noEmit --pretty false.

typecheck.include ​

  • Тип: string[]
  • По умолчанию: ['**/*.{test,spec}-d.?(c|m)[jt]s?(x)']

Глобальный шаблон для файлов, которые должны рассматриваться как тестовые файлы.

typecheck.exclude ​

  • Тип: string[]
  • По умолчанию: ['**/node_modules/**', '**/dist/**', '**/cypress/**', '**/.{idea,git,cache,output,temp}/**']

Глобальный шаблон для файлов, которые не должны рассматриваться как тестовые файлы.

typecheck.allowJs ​

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

Проверяет JS-файлы, содержащие комментарий @ts-check. Если у вас это включено в tsconfig, эта опция не будет его переопределять.

typecheck.ignoreSourceErrors ​

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

Не завершает работу, если Vitest обнаружил ошибки вне тестовых файлов. Это вообще не будет отображать ошибки, не относящиеся к тестам.

По умолчанию, если Vitest находит ошибку в исходном коде, он провалит тестовый набор.

typecheck.tsconfig ​

  • Тип: string
  • По умолчанию: пытается найти ближайший tsconfig.json

Путь к пользовательскому tsconfig, относительно корня проекта.

typecheck.spawnTimeout ​

  • Тип: number
  • По умолчанию: 10_000

Минимальное время в миллисекундах, необходимое для запуска проверки типов.

slowTestThreshold* ​

  • Тип: number
  • По умолчанию: 300
  • CLI: --slow-test-threshold=<number>, --slowTestThreshold=<number>

Количество миллисекунд, после которого тест или набор считается медленным и отмечается как таковой в результатах.

chaiConfig ​

  • Тип: { includeStack?, showDiff?, truncateThreshold? }
  • По умолчанию: { includeStack: false, showDiff: true, truncateThreshold: 40 }

Эквивалентно Chai config.

chaiConfig.includeStack ​

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

Определяет, включается ли трассировка стека в сообщение об ошибке утверждения. Значение по умолчанию false скрывает трассировку стека в сообщении об ошибке.

chaiConfig.showDiff ​

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

Определяет, должен ли флаг showDiff быть включен в генерируемые ошибки утверждения. false всегда будет false; true будет true, когда утверждение требует отображения различий.

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

Пользовательский обработчик для вывода в консоль в тестах. Если вы вернете 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=<path>

Объект DiffOptions или путь к модулю, экспортирующему DiffOptions. Полезно, если вы хотите настроить отображение различий.

Например, как объект конфигурации:

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

export default defineConfig({
  test: {
    diff: {
      aIndicator: c.bold('--'),
      bIndicator: c.bold('++'),
      omitAnnotationLines: true,
    },
  },
});

Или как модуль:

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

export default defineConfig({
  test: {
    diff: './vitest.diff.ts',
  },
});
ts
import type { DiffOptions } from 'vitest';
import c from 'picocolors';

export default {
  aIndicator: c.bold('--'),
  bIndicator: c.bold('++'),
  omitAnnotationLines: true,
} satisfies DiffOptions;

diff.expand ​

  • Тип: boolean
  • По умолчанию: true
  • CLI: --diff.expand=false

Разворачивает все общие строки.

diff.truncateThreshold ​

  • Тип: number
  • По умолчанию: 0
  • CLI: --diff.truncateThreshold=<path>

Максимальная длина отображаемых различий. Различия, превышающие этот порог, будут сокращены. Усечение не применяется при значении по умолчанию 0.

diff.truncateAnnotation ​

  • Тип: string
  • По умолчанию: '... Diff result is truncated'
  • CLI: --diff.truncateAnnotation=<annotation>

Аннотация, выводимая в конце результата различий, если он был сокращен.

diff.truncateAnnotationColor ​

  • Тип: DiffOptionsColor = (arg: string) => string
  • По умолчанию: noColor = (string: string): string => string

Цвет аннотации усечения, по умолчанию отображается без цвета.

diff.printBasicPrototype ​

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

Отображает базовый прототип Object и Array в выводе различий.

diff.maxDepth ​

  • Тип: number
  • По умолчанию: 20 (или 8 при сравнении разных типов)

Ограничивает глубину рекурсии при печати вложенных объектов.

fakeTimers ​

  • Тип: FakeTimerInstallOpts

Опции, которые Vitest передает в @sinon/fake-timers при использовании vi.useFakeTimers().

fakeTimers.now ​

  • Тип: number | Date
  • По умолчанию: Date.now()

Устанавливает поддельные таймеры, начиная с указанной эпохи Unix.

fakeTimers.toFake ​

  • Тип: ('setTimeout' | 'clearTimeout' | 'setImmediate' | 'clearImmediate' | 'setInterval' | 'clearInterval' | 'Date' | 'nextTick' | 'hrtime' | 'requestAnimationFrame' | 'cancelAnimationFrame' | 'requestIdleCallback' | 'cancelIdleCallback' | 'performance' | 'queueMicrotask')[]
  • По умолчанию: все доступные глобально, кроме nextTick и queueMicrotask

Массив с именами глобальных методов и 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* ​

УСТАРЕЛО

Эта опция устарела и будет удалена в следующем мажорном релизе. Пожалуйста, используйте projects вместо нее.

  • Тип: string | TestProjectConfiguration[]
  • CLI: --workspace=./file.js
  • По умолчанию: vitest.{workspace,projects}.{js,ts,json} рядом с файлом конфигурации или корнем

Путь к файлу конфигурации рабочей области, относительно корня проекта.

Начиная с Vitest 3, вы также можете определить массив рабочей области в корневой конфигурации. Если workspace определен в конфигурации вручную, Vitest будет игнорировать файл vitest.workspace в корне.

projects* ​

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

Массив проектов.

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
  • или используете режим браузера без безголового режима
  • или используете HTML Reporter

TIP

Эта опция не имеет эффекта, если вы не используете пользовательский код, который на нее полагается.

snapshotEnvironment ​

  • Тип: string

Путь к пользовательской реализации среды для работы со снимками. Это полезно, если вы запускаете тесты в среде, которая не поддерживает API Node.js. Эта опция не влияет на браузерный раннер.

Этот объект должен иметь форму 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. Это полезно для отладки.

attachmentsDir 3.2.0+ ​

  • Тип: string
  • По умолчанию: '.vitest-attachments'

Путь к каталогу для хранения вложений, созданных context.annotate, относительно корня проекта.

Pager
Предыдущая страницаВозможности
Следующая страницаСправочник по API тестирования

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

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

https://vitest.dev/config/

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

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