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

In-source тестирование (Тестирование в исходном коде)

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

Тестовая среда

Расширение проверок (matchers)

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

Отладка

Сравнения с другими тестовыми фреймворками

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

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

Profiling Test Performance

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

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

Рабочая область ​

Пример проекта

GitHub - Запустить онлайн

Vitest предоставляет возможность определять несколько конфигураций проекта в рамках одного процесса Vitest. Эта функция особенно полезна для монорепозиториев, но также может использоваться для запуска тестов с различными конфигурациями, такими как resolve.alias, plugins, test.browser и другими.

Определение рабочей области ​

Рабочая область должна включать файл vitest.workspace или vitest.projects в своей корневой директории (расположенной в той же папке, что и ваш корневой файл конфигурации, или в рабочем каталоге, если он не существует). Vitest поддерживает расширения ts, js и json для этого файла.

ИМЕНОВАНИЕ

Обратите внимание, что эта функция называется workspace, а не workspaces (без "s" в конце).

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

ts
export default ['packages/*'];

Vitest будет рассматривать каждую папку в packages как отдельный проект, даже если файл конфигурации отсутствует. Начиная с Vitest 2.1, если этот шаблон glob совпадает с любым файлом, он будет считаться конфигурацией Vitest, даже если в его имени нет vitest.

WARNING

Vitest не рассматривает корневой файл vitest.config как проект рабочей области, если он явно не указан в конфигурации рабочей области. Следовательно, корневая конфигурация будет применяться только к глобальным параметрам, таким как reporters и coverage.

Вы также можете ссылаться на проекты по их файлам конфигурации:

ts
export default ['packages/*/vitest.config.{e2e,unit}.ts'];

Этот шаблон будет включать только проекты с файлом vitest.config, в имени которого есть e2e или unit перед расширением.

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

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

// defineWorkspace обеспечивает удобство разработки благодаря подсказкам типов
export default defineWorkspace([
  // соответствует каждой папке и файлу внутри папки `packages`
  'packages/*',
  {
    // добавьте "extends" для объединения двух конфигураций
    extends: './vite.config.js',
    test: {
      include: ['tests/**/*.{browser}.test.{ts,js}'],
      // рекомендуется определить имя при использовании встроенных конфигураций
      name: 'happy-dom',
      environment: 'happy-dom',
    },
  },
  {
    test: {
      include: ['tests/**/*.{node}.test.{ts,js}'],
      name: 'node',
      environment: 'node',
    },
  },
]);

WARNING

Все проекты должны иметь уникальные имена; в противном случае Vitest сгенерирует ошибку. Если имя не указано во встроенной конфигурации, Vitest присвоит ему числовое значение. Для конфигураций проектов, определенных с использованием синтаксиса glob, Vitest по умолчанию будет использовать свойство "name" в ближайшем файле package.json или, если такое свойство отсутствует, имя папки.

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

json
["packages/*"]

Проекты рабочей области не поддерживают все параметры конфигурации. Для лучшей типобезопасности используйте метод defineProject вместо defineConfig в файлах конфигурации проекта:

ts
// @errors: 2769
import { defineProject } from 'vitest/config';

export default defineProject({
  test: {
    environment: 'jsdom',
    // "reporters" не поддерживается в конфигурации проекта,
    // поэтому будет показана ошибка
    reporters: ['json'],
  },
});

Запуск тестов ​

Чтобы запустить тесты внутри рабочей области, определите скрипт в вашем корневом package.json:

json
{
  "scripts": {
    "test": "vitest"
  }
}

Теперь тесты можно запускать с помощью вашего пакетного менеджера:

bash
npm run test
bash
yarn test
bash
pnpm run test
bash
bun test

Если вам нужно запустить тесты только для одного проекта, используйте опцию CLI --project:

bash
npm run test --project e2e
bash
yarn test --project e2e
bash
pnpm run test --project e2e
bash
bun test --project e2e

TIP

Опция CLI --project может использоваться несколько раз для фильтрации нескольких проектов:

bash
npm run test --project e2e --project unit
bash
yarn test --project e2e --project unit
bash
pnpm run test --project e2e --project unit
bash
bun test --project e2e --project unit

Конфигурация ​

Ни одна из опций конфигурации не унаследована от корневого файла конфигурации. Вы можете создать общий файл конфигурации и объединить его с конфигурацией проекта самостоятельно:

ts
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';

export default mergeConfig(
  configShared,
  defineProject({
    test: {
      environment: 'jsdom',
    },
  })
);

На уровне defineWorkspace вы можете использовать опцию extends для наследования корневой конфигурации. Все опции будут объединены.

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

export default defineWorkspace([
  {
    extends: './vitest.config.ts',
    test: {
      name: 'unit',
      include: ['**/*.unit.test.ts'],
    },
  },
  {
    extends: './vitest.config.ts',
    test: {
      name: 'integration',
      include: ['**/*.integration.test.ts'],
    },
  },
]);

Некоторые из опций конфигурации не разрешены в конфигурации проекта. Наиболее заметные:

  • coverage: покрытие рассчитывается для всего рабочего пространства
  • reporters: поддерживаются только репортеры, определенные на корневом уровне
  • resolveSnapshotPath: используется только корневой резолвер
  • все остальные опции, которые не затрагивают тестовые раннеры

TIP

Все опции конфигурации, которые не поддерживаются в конфигурации проекта, обозначены знаком * в руководстве "Config".

Pager
Предыдущая страницаФункциональность
Следующая страницаИнтерфейс командной строки

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

Авторские права (c) 2024 Mithril Contributors

https://v2.vitest.dev/guide/workspace

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

Авторские права (c) 2024 Mithril Contributors