Рабочее пространство
Vitest предоставляет встроенную поддержку монорепозиториев через файл конфигурации рабочего пространства. Вы можете создать рабочее пространство для определения настроек проекта.
Определение рабочего пространства
Рабочее пространство должно иметь файл vitest.workspace
или vitest.projects
в корневом каталоге (в той же папке, что и ваш файл конфигурации, если он у вас есть). Vitest поддерживает расширения ts
/js
/json
для этого файла.
Файл конфигурации рабочего пространства должен содержать экспорт по умолчанию со списком файлов или glob-шаблонов, указывающих на проекты. Например, если у вас есть папка с вашими проектами под названием packages
, вы можете определить рабочее пространство с таким файлом конфигурации:
export default ['packages/*'];
Vitest будет воспринимать каждую папку в packages
как отдельный проект, даже если в ней нет файла конфигурации.
WARNING
Vitest не будет рассматривать корневую конфигурацию как проект рабочего пространства, поэтому тесты, указанные в include
в корневой конфигурации, не будут запущены, если она не указана в конфигурации рабочего пространства.
Вы также можете ссылаться на проекты, указывая пути к их файлам конфигурации:
export default ['packages/*/vitest.config.{e2e,unit}.ts'];
Этот шаблон включает только проекты, у которых имя файла vitest.config
содержит e2e
или unit
перед расширением.
WARNING
Если вы ссылаетесь на файлы конфигурации с помощью glob-шаблона, убедитесь, что имя файла начинается с vite.config
или vitest.config
. В противном случае Vitest его проигнорирует.
Вы также можете определять проекты со встроенной конфигурацией. Файл рабочего пространства поддерживает использование обоих синтаксисов одновременно.
import { defineWorkspace } from 'vitest/config';
// defineWorkspace предоставляет приятный DX (Developer Experience) благодаря подсказкам типов
export default defineWorkspace([
'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 по умолчанию будет использовать имя каталога.
Если вы не используете встроенные конфигурации, вы можете просто создать небольшой JSON-файл в вашем корневом каталоге:
["packages/*"]
Проекты рабочего пространства не поддерживают все свойства конфигурации. Для повышения типобезопасности используйте метод defineProject
вместо метода defineConfig
внутри файлов конфигурации проекта:
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// "reporters" не поддерживается в конфигурации проекта,
// поэтому будет показана ошибка
reporters: ['json'],
},
});
Конфигурация
Параметры конфигурации не наследуются из файла конфигурации корневого уровня. Вы можете создать общий файл конфигурации и самостоятельно объединить его с конфигурацией проекта.
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
Кроме того, некоторые параметры конфигурации не разрешены в конфигурации проекта. В частности:
coverage
: покрытие рассчитывается для всего рабочего пространстваreporters
: поддерживаются только репортеры корневого уровняresolveSnapshotPath
: учитывается только резолвер корневого уровня- все остальные параметры, не влияющие на запуск тестов
TIP
На странице "Config" все параметры конфигурации, не поддерживаемые в конфигурации проекта, отмечены знаком *.
Покрытие
Поддержка покрытия кода для проектов рабочего пространства доступна сразу. Но если у вас включена опция all
и вы используете нестандартные расширения файлов в некоторых из ваших проектов, вам потребуется плагин, который обрабатывает эти расширения в вашем файле корневой конфигурации.
Например, если у вас есть пакет, который использует Vue-файлы и имеет свой собственный файл конфигурации, но некоторые из этих файлов не импортируются в ваших тестах, покрытие кода не сможет проанализировать неиспользуемые файлы. Это связано с тем, что оно использует корневую конфигурацию, а не конфигурацию проекта.