擴展報告器
WARNING
這是一個進階 API。如果您只想設定內建報告器,請參閱"報告器"指南。
您可以從 vitest/reporters
匯入並擴展現有的報告器,以建立自訂報告器。
擴展內建報告器
通常情況下,您無需從零開始建立報告器。vitest
提供了多個預設報告器,您可以直接擴展它們。
ts
import { DefaultReporter } from 'vitest/reporters';
export default class MyDefaultReporter extends DefaultReporter {
// 執行自訂邏輯
}
當然,您也可以從頭開始建立報告器。只需擴展 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() {
// 輸出一些內容
}
}
然後,您可以在 vitest.config.ts
檔案中使用您的自訂報告器:
ts
import { defineConfig } from 'vitest/config';
import CustomReporter from './custom-reporter.js';
export default defineConfig({
test: {
reporters: [new CustomReporter()],
},
});
已報告的任務
建議使用「已報告的任務」API,而非直接使用報告器接收的任務。
您可以透過呼叫 vitest.state.getReportedEntity(runnerTask)
來存取此 API:
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) {
// 請注意,舊的任務實作使用 "file" 而非 "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