タスクメタデータ 
警告
Vitestは実験的なプライベートAPIを公開しています。破壊的変更はセムバーを遵守しない可能性があるので、それを使用する場合にはVitestのバージョンをピン止めしてください。
カスタムレポーターの開発またはVitest Node.js APIの使用の場合は、レポーターやカスタムVitestハンドラーに、さまざまなコンテキストで実行されるテストからデータを渡すことが有用になる場合があります。
これを実現するには、シリアライズできないため、テストコンテキストに依存することはできません。ただし、Vitestを使用すると、すべてのタスク(スイートまたはテスト)で利用可能なmetaプロパティを利用して、テストとNode.jsプロセス間でデータを共有できます。この通信は一方向のみであることに注意することが重要です。metaプロパティはテストコンテキスト内からのみ変更できるためです。Node.jsコンテキスト内で行われた変更はテストでは表示されません。
metaプロパティに値を設定するのは、テストコンテキストまたはスイートタスクのbeforeAll/afterAllフック内で行えます。
afterAll((suite) => {
  suite.meta.done = true
})
test('custom', ({ task }) => {
  task.meta.custom = 'some-custom-handler'
})テストが完了すると、Vitestは結果とmetaを含むタスクをRPCを使用してNode.jsプロセスに送信します。このタスクをインターセプトして処理するには、レポーターの実装で使用可能なonTaskUpdateメソッドを利用できます
// custom-reporter.js
export default {
  // you can intercept packs if needed
  onTaskUpdate(packs) {
    const [id, result, meta] = packs[0]
  },
  // meta is located on every task inside "onFinished"
  onFinished(files) {
    files[0].meta.done === true
    files[0].tasks[0].meta.custom === 'some-custom-handler'
  }
}警告
いくつかのテストが短期間に完了した場合、Vitestは同時にいくつかのタスクを送信できます。
注意
Vitestは、Node.jsプロセスとの通信にさまざまな方法を使用しています。
- Vitestがワーカーのスレッド内でテストを実行する場合、メッセージポートを使用してデータを送信します
- Vitestが子プロセスを使用する場合、データはprocess.sendAPIを介してシリアライズされたバッファーとして送信されます
- Vitestがブラウザでテストを実行する場合、データはflattedパッケージを使用して文字列に変換されます
一般的な経験則として、関数、Promise、正規表現(v8.stringifyでシリアライズできません。ただし、文字列バージョンを送信してNode.jsプロセスで自分で解析できます)、その他の非シリアライズ可能なデータ以外のほとんどすべてを送信できますが、中に循環参照を含めることはできます。
また、設定する前にErrorプロパティをシリアライズしてください。
また、テストの実行後にVitestステータスからこの情報を取得することもできます。
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を使用する場合、型定義を拡張することもできます
declare module 'vitest' {
  interface TaskMeta {
    done?: boolean
    custom?: string
  }
}