bun test 通过报告器支持不同的输出格式。本文档涵盖内置报告器以及如何实现你自己的自定义报告器。
内置报告器
默认控制台报告器
默认情况下,bun test 以人类可读的格式将结果输出到控制台:
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 in 1.44ms当终端不支持颜色时,输出将避免使用非 ASCII 字符:
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 files. [0.66ms]点状报告器
点状报告器为通过的测试显示 .,为失败的测试显示 F——适用于大型测试套件。
bun test --dots
bun test --reporter=dotsJUnit XML 报告器
对于 CI/CD 环境,Bun 支持生成 JUnit XML 报告。JUnit XML 是一种广泛采用的测试结果格式,可以被许多 CI/CD 系统解析,包括 GitLab、Jenkins 等。
使用 JUnit 报告器
要生成 JUnit XML 报告,请使用 --reporter=junit 标志以及 --reporter-outfile 指定输出文件:
bun test --reporter=junit --reporter-outfile=./junit.xml这将像往常一样继续输出到控制台,同时在测试运行结束时将 JUnit XML 报告写入指定路径。
通过 bunfig.toml 配置
你也可以在 bunfig.toml 文件中配置 JUnit 报告器:
[test.reporter]
junit = "path/to/junit.xml" # JUnit XML 报告输出路径JUnit 报告中的环境变量
JUnit 报告器自动将环境变量作为 <properties> 包含在 XML 输出中。这对于在 CI 环境中跟踪测试运行很有帮助。
具体来说,它在可用时包括以下环境变量:
| 环境变量 | 属性名称 | 描述 |
|---|---|---|
GITHUB_RUN_ID、GITHUB_SERVER_URL、GITHUB_REPOSITORY、CI_JOB_URL | ci | CI 构建信息 |
GITHUB_SHA、CI_COMMIT_SHA、GIT_SHA | commit | Git 提交标识符 |
| 系统主机名 | hostname | 机器主机名 |
这使得跟踪特定测试运行的环境和提交变得更加容易。
当前限制
JUnit 报告器目前有一些限制,将在未来的更新中解决:
- 单个测试的
stdout和stderr输出未包含在报告中 - 每个测试用例的精确时间戳字段未包含
GitHub Actions 报告器
Bun test 自动检测何时在 GitHub Actions 内运行,并将 GitHub Actions 注解直接输出到控制台。除了安装 Bun 并运行 bun test 外,不需要特殊配置。
有关 GitHub Actions 工作流配置示例,请参阅 CLI 文档的 CI/CD 集成 部分。
自定义报告器
Bun 允许开发人员通过扩展 WebKit Inspector Protocol 并添加特定于测试的其他域来实现自定义测试报告器。
用于测试的 Inspector Protocol
为了支持测试报告,Bun 使用两个自定义域扩展了标准 WebKit Inspector Protocol:
- TestReporter:报告测试发现、执行开始和完成事件
- LifecycleReporter:报告测试执行期间的错误和异常
这些扩展允许你构建自定义报告工具,可以实时接收有关测试执行的详细信息。
关键事件
自定义报告器可以监听这些关键事件:
TestReporter.found:发现测试时发出TestReporter.start:测试开始运行时发出TestReporter.end:测试完成时发出Console.messageAdded:测试期间发生控制台输出时发出LifecycleReporter.error:发生错误或异常时发出