Skip to content
Vitest 0
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 を公開しています。破壊的な変更はセマンティックバージョニングに従わない可能性があるため、使用する際は 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 を介して、結果と meta を含むタスクを Node.js プロセスに送信します。このタスクをインターセプトして処理するには、リポーターの実装で利用できる 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 は複数のタスクをまとめて送信することがあります。

BEWARE

Vitest は、Node.js プロセスとの通信に異なる方法を使用します。

  • Vitest がワーカースレッド内でテストを実行する場合、メッセージポート を介してデータを送信します。
  • Vitest が子プロセスを使用する場合、データはシリアル化された Buffer として process.send API を介して送信されます。
  • Vitest がブラウザでテストを実行する場合、データは flatted パッケージを使用して文字列化されます。

原則として、関数、Promise、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
前のページテストランナー
次のページデフォルトレポーターの拡張方法

MITライセンス の下で公開されています。

Copyright (c) 2024 Mithril Contributors

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

MITライセンス の下で公開されています。

Copyright (c) 2024 Mithril Contributors