运行时包管理器打包器测试运行器代码检查格式化指南参考博客反馈

测试报告工具

bun test 通过内置和自定义报告器支持不同的输出格式。


内置报告工具

默认控制台报告工具

默认情况下,bun test 会以人类可读的格式将结果输出到控制台:

terminal
test/package-json-lint.test.ts:
✓ test/package.json [0.88ms]
✓ test/js/third_party/grpc-js/package.json [0.18ms]
✓ test/js/third_party/svelte/package.json [0.21ms]
✓ test/js/third_party/express/package.json [1.05ms]

 4 pass
 0 fail
 4 expect() calls
Ran 4 tests across 1 file. [8.00ms]

当终端不支持颜色时,输出会避免使用非 ASCII 字符:

terminal
test/package-json-lint.test.ts:
(pass) test/package.json [0.48ms]
(pass) test/js/third_party/grpc-js/package.json [0.10ms]
(pass) test/js/third_party/svelte/package.json [0.04ms]
(pass) test/js/third_party/express/package.json [0.04ms]

 4 pass
 0 fail
 4 expect() calls
Ran 4 tests across 1 file. [9.00ms]

点状报告工具

点状报告工具会为通过的测试显示 .,并为失败的测试输出完整的错误详情,适用于大型测试套件。

terminal
bun test --dots
bun test --reporter=dots

JUnit XML 报告工具

对于 CI/CD 环境,Bun 可以生成 JUnit XML 报告。JUnit XML 是一种广泛采用的测试结果格式,许多 CI/CD 系统都可以解析,包括 GitLab 和 Jenkins。

使用 JUnit 报告工具

要生成 JUnit XML 报告,使用 --reporter=junit 标志并配合 --reporter-outfile 指定输出文件:

terminal
bun test --reporter=junit --reporter-outfile=./junit.xml

控制台输出不会改变;Bun 会在测试运行结束时将 JUnit XML 报告写入指定路径。

通过 bunfig.toml 配置

你也可以在 bunfig.toml 中配置 JUnit 报告工具:

bunfig.toml
[test.reporter]
junit = "path/to/junit.xml"  # JUnit XML 报告的输出路径

JUnit 报告中的环境变量

JUnit 报告工具会将环境信息作为 <properties> 包含在 XML 输出中,因此你可以了解测试运行所对应的环境和提交。

在可用时,它会包含以下环境变量:

环境变量属性名称说明
GITHUB_RUN_ID、GITHUB_SERVER_URL、GITHUB_REPOSITORY、CI_JOB_URLciCI 构建信息
GITHUB_SHA、CI_COMMIT_SHA、GIT_SHAcommitGit 提交标识
系统主机名hostname机器主机名

当前限制

JUnit 报告工具不包含:

  • 各个测试的 stdout 和 stderr 输出
  • 每个测试用例的精确时间戳字段

GitHub Actions 报告工具

bun test 会检测其是否在 GitHub Actions 中运行,并直接向控制台输出 GitHub Actions 注释。除了安装 Bun 并运行 bun test 外,无需进行其他配置。

有关 GitHub Actions 工作流的示例,请参阅 CI/CD 集成。


自定义报告工具

你可以使用 Bun 针对 WebKit 检查器协议的测试专用扩展来实现自定义测试报告器,从而实时报告测试执行的详细信息。

测试检查器协议

Bun 使用两个自定义域扩展了标准 WebKit 检查器协议:

  1. TestReporter:报告测试发现、开始和结束事件
  2. LifecycleReporter:报告测试执行期间的错误和异常

关键事件

自定义报告器可以监听以下事件:

  • TestReporter.found:测试被发现时触发
  • TestReporter.start:测试开始运行时触发
  • TestReporter.end:测试完成时触发
  • Console.messageAdded:测试运行期间控制台有输出时触发
  • LifecycleReporter.error:发生错误或异常时触发