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

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

Если вы разрабатываете кастомный репортер или используете Vitest Node.js API, вам может быть полезно передавать данные из тестов, выполняемых в различных контекстах, вашему репортеру или пользовательскому обработчику в Vitest.

Для этой цели нецелесообразно использовать контекст теста, поскольку он не может быть сериализован. Однако с Vitest вы можете использовать свойство meta, доступное для каждой задачи (набора или теста), чтобы обмениваться данными между вашими тестами и процессом Node.js. Важно отметить, что это исключительно односторонняя связь, поскольку свойство meta может быть изменено только из контекста теста. Любые изменения, сделанные в контексте Node.js, не будут видны в ваших тестах.

Вы можете установить значение свойства meta в контексте теста или внутри хуков beforeAll и afterAll для задач набора.

ts
afterAll(suite => {
  suite.meta.done = true;
});

test('custom', ({ task }) => {
  task.meta.custom = 'some-custom-handler';
});

После завершения теста Vitest отправит задачу, содержащую результат и meta, в процесс Node.js с использованием RPC, а затем отразит это в onTestCaseResult и других хуках, имеющих доступ к задачам. Для обработки этого тестового случая вы можете использовать метод onTestCaseResult, реализованный в вашем репортере:

ts
import type { Reporter, TestCase, TestModule } from 'vitest/node';

export default {
  onTestCaseResult(testCase: TestCase) {
    // custom === 'some-custom-handler' ✅
    const { custom } = testCase.meta();
  },
  onTestRunEnd(testModule: TestModule) {
    testModule.meta().done === true;
    testModule.children.at(0).meta().custom === 'some-custom-handler';
  },
} satisfies Reporter;

ВНИМАНИЕ

Vitest использует различные методы для связи с процессом Node.js:

  • Если Vitest запускает тесты внутри рабочих потоков, он будет передавать данные через порт сообщений.
  • Если Vitest использует дочерний процесс, данные будут отправлены в виде сериализованного буфера через API process.send.
  • Если Vitest запускает тесты в браузере, данные будут строкифицированы с использованием пакета flatted.

Это свойство также доступно в каждом тесте в json репортере, поэтому убедитесь, что данные могут быть сериализованы в JSON.

Также убедитесь, что вы сериализуете свойства ошибок перед их установкой.

Вы также можете получить эту информацию из состояния Vitest после завершения тестов:

ts
const vitest = await createVitest('test');
const { testModules } = await vitest.start();

const testModule = testModules[0];
testModule.meta().done === true;
testModule.children.at(0).meta().custom === 'some-custom-handler';

Также возможно расширить определения типов для TypeScript:

ts
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean;
    custom?: string;
  }
}
Pager
Предыдущая страницаРепортеры
Следующая страницаЗапуск тестов

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

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

https://vitest.dev/advanced/metadata

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

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