Reporter API
Reporter API 允许你创建自定义测试结果处理器和输出格式器。此接口是实验性的,在未来的版本中可能会发生变化。
注意:使用示例和配置指南,请参阅 报告器指南。
使用自定义报告器
通过实现 Reporter 接口来创建自定义报告器:
在配置中使用自定义报告器:
接口概览
Reporter 接口为测试执行提供生命周期钩子。每个钩子在测试运行期间的具体时间点被调用。
重要提示:有关最新的接口定义和完整类型签名,请参考 源代码。
钩子类别
- 文件级钩子:
onTestFileStart、onTestFileReady、onTestFileResult - 套件级钩子:
onTestSuiteStart、onTestSuiteResult - 用例级钩子:
onTestCaseStart、onTestCaseResult - 运行级钩子:
onTestRunStart、onTestRunEnd、onUserConsoleLog、onExit
基本接口结构
从 v0.12.0 开始,除了 CLI 异常退出,Rstest 还会在 reporter 所属 context 释放时调用 onExit,包括 run、list 或 merge 正常结束、watch close 和启动失败。list context 目前不会 attach reporter,因此没有可调用的 reporter Hook。可以用 onExit 释放 stream、renderer 等资源。Hook 抛出的错误不会覆盖操作本身的结果或错误。
Reporter result 上可以读取 meta 字段。通过 context.task.meta 写入的可 JSON 序列化运行时 metadata 可以在 onTestCaseResult 收到的 TestResult 上读取。通过 hooks 的 ctx.meta 写入的 metadata 可以在 onTestSuiteResult 收到的对应 suite result 上读取,文件级 hook metadata 可以在 onTestFileResult 的 TestFileResult.meta 上读取。
onTestRunEnd
每轮运行结束时调用 onTestRunEnd,参数里是这一轮结束时的结果和汇总。从 v0.12.0 开始,参数带上了 summary 和 rerunTestPaths,unhandledErrors 固定是序列化后的错误数组。
watch 模式下,results、testResults 和 summary 是整个会话的累计结果:每个文件只保留最新一次的结果,删除的文件会移出。rerunTestPaths 是这一轮实际执行的文件,一次性运行没有这个字段。unhandledErrors 里的每一项都是普通对象,可以直接序列化为 JSON。
TestResult
TestResult 和 TestFileResult 由 @rstest/core 导出。套件和用例级钩子收到的是 TestResult,文件级钩子和 onTestRunEnd 收到的是 TestFileResult,它在 TestResult 的基础上多了这个文件里各个测试的结果。
- 类型:
TestFileResult
- 类型:
SerializedError 的结构和 onTestRunEnd 参数里 unhandledErrors 的每一项相同。SnapshotResult 来自 @vitest/snapshot,FileCoverageData 来自 istanbul-lib-coverage。