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

測試執行器

任務元數據

擴充報告器

自訂池

本頁導覽

任務元數據 ​

WARNING

Vitest 公開了實驗性的私有 API。重大變更可能不遵循語義版本控制 (semver),使用時請固定 Vitest 的版本。

如果您正在開發自定義的報表器或使用 Vitest Node.js API,您可能會發現將在各種上下文中執行的測試資料傳遞到您的報表器或自定義 Vitest 處理程序非常有用。

爲了實現這一點,依賴 測試上下文 並不可行,因為它無法被序列化。但是,使用 Vitest,您可以利用每個任務(測試套件或測試)上可用的 meta 屬性,在您的測試和 Node.js 進程之間共享資料。重要的是要注意,這種通信是單向的,因為 meta 屬性只能從測試上下文中修改。在 Node.js 上下文中所做的任何更改在您的測試中不會生效。

您可以在測試上下文或測試套件任務的 beforeAll/afterAll 鉤子中填充 meta 屬性。

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

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

測試完成後,Vitest 將使用 RPC 向 Node.js 進程發送一個包含結果和 meta 的任務。要攔截和處理此任務,您可以使用報表器實作中提供的 onTaskUpdate 方法:

ts
// custom-reporter.js
export default {
  onTaskUpdate(packs) {
    const [id, result, meta] = packs[0]
  },
  onFinished(files) {
    files[0].meta.done === true
    files[0].tasks[0].meta.custom === 'some-custom-handler'
  }
}

WARNING

如果多個測試在短時間內完成,Vitest 可能会同時發送多個任務。

BEWARE

Vitest 使用不同的方法與 Node.js 進程通信。

  • 如果 Vitest 在 worker threads 內運行測試,它將通過 message port 發送資料。
  • 如果 Vitest 使用子程序,資料將作為序列化的 Buffer 通過 process.send API 發送。
  • 如果 Vitest 在瀏覽器中運行測試,資料將使用 flatted 包進行字串化。

一般原則是,您可以發送幾乎任何東西,但函數、Promise、正則表達式和其他不可序列化的資料除外。v8.stringify 無法序列化 regexp,但您可以發送字串版本,並在 Node.js 進程中自行解析。此外,您可以發送包含循環參考的資料。

此外,在設置 Error properties 之前,請務必先將其序列化。

您也可以在測試完成執行時從 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
上一頁測試執行器
下一頁擴充報告器

以 MIT 授權條款 發布。

版權所有 (c) 2024 Mithril Contributors

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

以 MIT 授權條款 發布。

版權所有 (c) 2024 Mithril Contributors