Skip to content
Vitest 1
Main Navigation РуководствоAPIКонфигурацияПродвинутый
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

Продвинутый

Node API

Test Runner

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

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

Кастомный пул

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

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

WARNING

Vitest предоставляет доступ к экспериментальному приватному API. Семантическое версионирование (semver) может не соблюдаться, поэтому рекомендуется зафиксировать версию Vitest при использовании.

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

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

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

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

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

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

ts
// custom-reporter.js
export default {
  // вы можете обрабатывать данные, если это необходимо
  onTaskUpdate(packs) {
    const [id, result, meta] = packs[0]
  },
  // meta находится в каждой задаче внутри "onFinished"
  onFinished(files) {
    files[0].meta.done === true
    files[0].tasks[0].meta.custom === 'some-custom-handler'
  }
}

WARNING

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

ВНИМАНИЕ

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

  • Если Vitest запускает тесты внутри воркер-потоков, он будет отправлять данные через message port.
  • Если Vitest использует дочерний процесс (child process), данные будут отправлены в виде сериализованного буфера через API process.send.
  • Если Vitest запускает тесты в браузере, данные будут сериализованы в строковый формат с использованием пакета flatted.

Как правило, вы можете отправлять почти любые данные, за исключением функций, Promises и RegExp. v8.stringify не может сериализовать RegExp, но вы можете отправить их строковое представление и распарсить в процессе Node.js. Также нельзя отправлять другие несериализуемые данные. При этом допускаются циклические ссылки.

Кроме того, убедитесь, что вы сериализуете свойства Error перед их использованием.

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

ts
const vitest = await createVitest('test')
await vitest.start()
vitest.state.getFiles()[0].meta.done === true
vitest.state.getFiles()[0].tasks[0].meta.custom === 'some-custom-handler'

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

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

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

Авторские права (c) 2024 Mithril Contributors

https://v1.vitest.dev/advanced/metadata

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

Авторские права (c) 2024 Mithril Contributors