Bun

测试报告器

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=dots

JUnit 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"  # Output path for JUnit XML report

JUnit 报告中的环境变量

JUnit 报告器会自动将环境信息作为 `` 包含在 XML 输出中。这对于在 CI 环境中跟踪测试运行很有帮助。

具体来说,它在可用时包含以下环境变量:

环境变量属性名称描述
`GITHUB_RUN_ID`、`GITHUB_SERVER_URL`、`GITHUB_REPOSITORY`、`CI_JOB_URL`ciCI 构建信息
`GITHUB_SHA`、`CI_COMMIT_SHA`、`GIT_SHA`commitGit 提交标识符
系统主机名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,增加了两个自定义域:

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

这些扩展允许您构建自定义报告工具,可以实时接收有关测试执行的详细信息。

关键事件

自定义报告器可以监听这些关键事件:

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