扩展报告器
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