Тестовые проекты
Пример проекта
WARNING
Эта функция также известна как workspace
. Начиная с версии 3.2, workspace
устарел и был заменен конфигурацией projects
. Функционально они идентичны.
Vitest предоставляет возможность определять несколько конфигураций проекта в рамках одного процесса Vitest. Эта функция особенно полезна для монорепозиториев, но также может использоваться для запуска тестов с различными конфигурациями, такими как resolve.alias
, plugins
, test.browser
и прочими.
Определение проектов
Вы можете определить проекты в своем корневом конфиге:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*'],
},
});
Конфигурации проектов — это непосредственно определенные конфигурации, файлы или глоб-шаблоны, ссылающиеся на ваши проекты. Например, если у вас есть папка packages
, которая содержит ваши проекты, вы можете определить массив в корневом конфиге Vitest:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*'],
},
});
Vitest будет рассматривать каждую папку в packages
как отдельный проект, даже если в этой папке нет файла конфигурации. Если этот глоб-шаблон соответствует любому файлу, он будет считаться конфигурацией Vitest, даже если его имя не содержит vitest
или он имеет нестандартное расширение файла.
WARNING
Vitest не рассматривает корневой конфигурационный файл vitest.config
как проект, если он явно не указан в конфигурации. Следовательно, корневая конфигурация будет влиять только на глобальные настройки, такие как reporters
и coverage
. Обратите внимание, что Vitest всегда будет запускать определенные хуки плагинов, такие как apply
, config
, configResolved
или configureServer
, указанные в корневом файле конфигурации. Vitest также использует те же плагины для выполнения глобальных установок и пользовательского провайдера покрытия.
Вы также можете ссылаться на проекты с их файлами конфигурации:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: ['packages/*/vitest.config.{e2e,unit}.ts'],
},
});
Этот шаблон будет включать только проекты с файлом vitest.config
, который содержит e2e
или unit
до расширения.
Вы также можете определять проекты, используя встроенную конфигурацию. Конфигурация поддерживает одновременное использование обоих синтаксисов.
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
projects: [
// соответствует каждой папке и файлу внутри папки `packages`
'packages/*',
{
// добавьте "extends: true", чтобы унаследовать параметры из корневого конфига
extends: true,
test: {
include: ['tests/**/*.{browser}.test.{ts,js}'],
// рекомендуется определить имя при использовании встроенных конфигов
name: 'happy-dom',
environment: 'happy-dom',
},
},
{
test: {
include: ['tests/**/*.{node}.test.{ts,js}'],
// цвет метки для имени можно изменить
name: { label: 'node', color: 'green' },
environment: 'node',
},
},
],
},
});
WARNING
Все проекты должны иметь уникальные имена; в противном случае Vitest выдаст ошибку. Если имя не указано во встроенной конфигурации, Vitest присвоит порядковый номер. Для конфигураций проектов, определенных с помощью синтаксиса glob, Vitest по умолчанию будет использовать свойство "name" в ближайшем файле package.json
или, если его нет, имя папки.
Проекты не поддерживают все свойства конфигурации. В целях повышения типобезопасности используйте метод defineProject
вместо defineConfig
в файлах конфигурации проекта:
// @errors: 2769
import { defineProject } from 'vitest/config';
export default defineProject({
test: {
environment: 'jsdom',
// "reporters" не поддерживается в конфигурации проекта,
// поэтому будет показана ошибка
reporters: ['json'],
},
});
Запуск тестов
Чтобы запустить тесты, добавьте скрипт в ваш корневой package.json
:
{
"scripts": {
"test": "vitest"
}
}
Теперь тесты можно запускать с помощью менеджера пакетов:
npm run test
yarn test
pnpm run test
bun run test
Если вам нужно запустить тесты только в конкретном проекте, используйте опцию CLI --project
:
npm run test --project e2e
yarn test --project e2e
pnpm run test --project e2e
bun run test --project e2e
TIP
Опцию CLI --project
можно использовать несколько раз для фильтрации нескольких проектов одновременно:
npm run test --project e2e --project unit
yarn test --project e2e --project unit
pnpm run test --project e2e --project unit
bun run test --project e2e --project unit
Конфигурация
Параметры конфигурации не наследуются из корневого файла конфигурации. Вы можете создать общий файл конфигурации и объединить его с конфигурацией проекта самостоятельно:
import { defineProject, mergeConfig } from 'vitest/config';
import configShared from '../vitest.shared.js';
export default mergeConfig(
configShared,
defineProject({
test: {
environment: 'jsdom',
},
})
);
Кроме того, вы можете использовать опцию extends
для наследования от корневой конфигурации. Все опции будут объединены.
import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
test: {
pool: 'threads',
projects: [
{
// будет наследовать опции из этого конфига, такие как плагины и пул
extends: true,
test: {
name: 'unit',
include: ['**/*.unit.test.ts'],
},
},
{
// не будет наследовать никаких опций из этого конфига
// это поведение по умолчанию
extends: false,
test: {
name: 'integration',
include: ['**/*.integration.test.ts'],
},
},
],
},
});
Неподдерживаемые опции
Некоторые параметры конфигурации недопустимы в конфигурации проекта. В частности:
coverage
: покрытие применяется ко всему процессуreporters
: поддерживаются только репортеры, определенные на корневом уровнеresolveSnapshotPath
: используется только резолвер корневого уровня- все остальные опции, не влияющие на работу тестовых раннеров
Все параметры конфигурации, которые не поддерживаются в конфигурации проекта, отмечены знаком * в руководстве "Config". Их необходимо определить один раз в корневом файле конфигурации.