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

API

Node API

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

Vitest API

TestProject

TestSpecification

Test Task API

TestCase

TestSuite

TestModule

TestCollection

API плагина

Runner API

Репортеры

Метаданные задачи

Руководство

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

Расширение репортеров

Пользовательский пул

Настройка Vitest

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

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

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

WARNING

Это руководство объясняет, как использовать расширенный API для запуска тестов с помощью скрипта Node.js. Если вам просто нужно запустить тесты, то, вероятно, этот подход вам не потребуется. Он в основном используется авторами библиотек.

Критические изменения могут не следовать SemVer. Пожалуйста, закрепите версию Vitest при использовании экспериментального API.

Vitest предлагает два метода для инициализации:

  • startVitest инициализирует Vitest, проверяет установку пакетов и немедленно запускает тесты.
  • createVitest только инициализирует Vitest и не запускает никаких тестов.

startVitest ​

ts
import { startVitest } from 'vitest/node';

const vitest = await startVitest(
  'test',
  [], // CLI-фильтры
  {}, // переопределение конфигурации тестов
  {}, // переопределение конфигурации Vite
  {} // пользовательские опции Vitest
);
const testModules = vitest.state.getTestModules();
for (const testModule of testModules) {
  console.log(testModule.moduleId, testModule.ok() ? 'passed' : 'failed');
}

TIP

API TestModule, TestSuite и TestCase не являются экспериментальными и соответствуют SemVer, начиная с Vitest 2.1.

createVitest ​

Создает экземпляр Vitest без запуска тестов.

Метод createVitest не проверяет установку необходимых пакетов. Он также не учитывает config.standalone или config.mergeReports. Vitest не будет автоматически завершен, даже если watch отключен.

ts
import { createVitest } from 'vitest/node';

const vitest = await createVitest(
  'test',
  {}, // переопределение конфигурации тестов
  {}, // переопределение конфигурации Vite
  {} // пользовательские опции Vitest
);

// вызывается при вызове `vitest.cancelCurrentRun()`
vitest.onCancel(() => {});
// вызывается во время вызова `vitest.close()`
vitest.onClose(() => {});
// вызывается, когда Vitest перезапускает тестовые файлы
vitest.onTestsRerun(files => {});

try {
  // это установит process.exitCode в 1, если тесты завершились неудачно,
  // и не завершит процесс автоматически
  await vitest.start(['my-filter']);
} catch (err) {
  // это может выбросить ошибку:
  // "FilesNotFoundError", если файлы не найдены
  // "GitNotFoundError" с `--changed` и репозиторий не инициализирован
} finally {
  await vitest.close();
}

Если вы собираетесь сохранить экземпляр Vitest, убедитесь, что вы хотя бы вызвали init. Это инициализирует репортеры и поставщика покрытия тестов, но не будет запускать тесты. Также рекомендуется включить режим watch, даже если вы не собираетесь использовать наблюдатель Vitest, но хотите, чтобы экземпляр оставался активным. Vitest полагается на этот флаг для правильной работы некоторых своих функций в постоянно работающем процессе.

После инициализации репортеров используйте runTestSpecifications или rerunTestSpecifications для запуска тестов, если требуется ручной запуск:

ts
watcher.on('change', async file => {
  const specifications = vitest.getModuleSpecifications(file);
  if (specifications.length) {
    vitest.invalidateFile(file);
    // вы можете использовать runTestSpecifications, если хуки "reporter.onWatcher*"
    // не требуется вызывать
    await vitest.rerunTestSpecifications(specifications);
  }
});

WARNING

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

Также обратите внимание, что getModuleSpecifications не будет распознавать тестовые файлы, если они еще не были обработаны globTestSpecifications. Если файл только что создан, используйте вместо этого project.matchesGlobPattern:

ts
watcher.on('add', async file => {
  const specifications = [];
  for (const project of vitest.projects) {
    if (project.matchesGlobPattern(file)) {
      specifications.push(project.createSpecification(file));
    }
  }

  if (specifications.length) {
    await vitest.rerunTestSpecifications(specifications);
  }
});

Если вам нужно отключить наблюдатель, вы можете указать server.watch: null начиная с Vite 5.3 или server.watch: { ignored: ['*/*'] } в конфигурации Vite:

ts
await createVitest(
  'test',
  {},
  {
    plugins: [
      {
        name: 'stop-watcher',
        async configureServer(server) {
          await server.watcher.close();
        },
      },
    ],
    server: {
      watch: null,
    },
  }
);
Pager
Предыдущая страницаМетаданные задачи
Следующая страницаРасширение репортеров

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

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

https://vitest.dev/advanced/guide/tests

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

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