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

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

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

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

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

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

WARNING

Эта функция также известна как workspace. Начиная с версии 3.2, workspace устарел и был заменен конфигурацией projects. Функционально они идентичны.

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

Определение проектов ​

Вы можете определить проекты в своем корневом конфиге:

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

export default defineConfig({
  test: {
    projects: ['packages/*'],
  },
});

Конфигурации проектов — это непосредственно определенные конфигурации, файлы или глоб-шаблоны, ссылающиеся на ваши проекты. Например, если у вас есть папка packages, которая содержит ваши проекты, вы можете определить массив в корневом конфиге Vitest:

ts
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 также использует те же плагины для выполнения глобальных установок и пользовательского провайдера покрытия.

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

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

export default defineConfig({
  test: {
    projects: ['packages/*/vitest.config.{e2e,unit}.ts'],
  },
});

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

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

ts
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 в файлах конфигурации проекта:

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 run test

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

bash
npm run test --project e2e
bash
yarn test --project e2e
bash
pnpm run test --project e2e
bash
bun run 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 run 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',
    },
  })
);

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

ts
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". Их необходимо определить один раз в корневом файле конфигурации.

Pager
Предыдущая страницаФильтрация тестов
Следующая страницаСредства отчётности

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

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

https://vitest.dev/guide/projects

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

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