レポーターの拡張
WARNING
これは高度なAPIです。組み込みレポーターの設定のみを行いたい場合は、"レポーター" ガイドを参照してください。
vitest/reporters
からレポーターをインポートし、それらを拡張してカスタムレポーターを作成できます。
組み込みレポーターの拡張
一般的に、レポーターをゼロから作成する必要はありません。vitest
には、拡張可能なデフォルトのレポーターがいくつか用意されています。
ts
import { DefaultReporter } from 'vitest/reporters';
export default class MyDefaultReporter extends DefaultReporter {
// do something
}
もちろん、レポーターをゼロから作成することも可能です。その場合は、BaseReporter
クラスを拡張し、必要なメソッドを実装するだけです。
以下はカスタムレポーターの実装例です。
ts
import { BaseReporter } from 'vitest/reporters';
export default class CustomReporter extends BaseReporter {
onCollected() {
const files = this.ctx.state.getFiles(this.watchFilters);
this.reportTestSummary(files);
}
}
または、Reporter
インターフェースを実装します。
ts
import type { Reporter } from 'vitest/node';
export default class CustomReporter implements Reporter {
onCollected() {
// print something
}
}
その後、vitest.config.ts
ファイルでカスタムレポーターを利用できます。
ts
import { defineConfig } from 'vitest/config';
import CustomReporter from './custom-reporter.js';
export default defineConfig({
test: {
reporters: [new CustomReporter()],
},
});
レポート対象タスク
レポーターが受け取るタスクを直接使用する代わりに、レポート対象タスクAPIを使用することを推奨します。
このAPIには、vitest.state.getReportedEntity(runnerTask)
を呼び出すことでアクセス可能です。
ts
import type { Reporter, RunnerTestFile, TestModule, Vitest } from 'vitest/node';
class MyReporter implements Reporter {
private vitest!: Vitest;
onInit(vitest: Vitest) {
this.vitest = vitest;
}
onFinished(files: RunnerTestFile[]) {
for (const file of files) {
// note that the old task implementation uses "file" instead of "module"
const testModule = this.vitest.state.getReportedEntity(
file
) as TestModule;
for (const task of testModule.children) {
// ^?
console.log('finished', task.type, task.fullName);
}
}
}
}
提供されているレポーター
vitest
には、すぐに使えるいくつかの組み込みレポーターが付属しています。
組み込みレポーター:
BasicReporter
DefaultReporter
DotReporter
JsonReporter
VerboseReporter
TapReporter
JUnitReporter
TapFlatReporter
HangingProcessReporter
抽象基底レポーター:
BaseReporter
インターフェース型レポーター:
Reporter