Skip to content

扩展默认报告器 (Extending Reporters)

WARNING

这是一个高级 API。如果我们只是想配置内置报告器,请阅读 Reporters 指南。

我们可以从 vitest/reporters 导入报告器并扩展它们来创建自定义报告器。

扩展内置报告器 (Extending Built-in Reporters)

一般来说,我们不需要从头开始创建报告器。vitest 附带了几个可以扩展的默认报告程序。

ts
import { DefaultReporter } from 'vitest/reporters'

export default class MyDefaultReporter extends DefaultReporter {
  // do something
}

当然,我们可以从头开始创建报告器。只需扩展 BaseReporter 类并实现我们需要的方法即可。

这是自定义报告器的示例:

custom-reporter.js
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 接口:

custom-reporter.js
ts
import type { Reporter } from 'vitest/node'

export default class CustomReporter implements Reporter {
  onCollected() {
    // print something
  }
}

然后我们可以在 vitest.config.ts 文件中使用自定义报告器:

vitest.config.ts
ts
import { defineConfig } from 'vitest/config'
import CustomReporter from './custom-reporter.js'

export default defineConfig({
  test: {
    reporters: [new CustomReporter()],
  },
})

报告的任务(Reported Tasks)

建议使用 Reported Tasks 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
) {
// 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
)
} } } }

导出报告器 (Exported Reporters)

vitest 附带了一些内置报告器,我们可以开箱即用。

内置报告器:

  1. BasicReporter
  2. DefaultReporter
  3. DotReporter
  4. JsonReporter
  5. VerboseReporter
  6. TapReporter
  7. JUnitReporter
  8. TapFlatReporter
  9. HangingProcessReporter

基础抽象报告器:

  1. BaseReporter

接口报告器:

  1. Reporter