Skip to content

bun test 通過報告器支持不同的輸出格式。本文檔涵蓋內置報告器以及如何實現你自己的自定義報告器。


內置報告器

默認控制台報告器

默認情況下,bun test 以人類可讀的格式將結果輸出到控制台:

sh
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 字符:

sh
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——適用於大型測試套件。

sh
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 指定輸出文件:

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

這將像往常一樣繼續輸出到控制台,同時在測試運行結束時將 JUnit XML 報告寫入指定路徑。

通過 bunfig.toml 配置

你也可以在 bunfig.toml 文件中配置 JUnit 報告器:

toml
[test.reporter]
junit = "path/to/junit.xml"  # JUnit XML 報告輸出路徑

JUnit 報告中的環境變量

JUnit 報告器自動將環境變量作為 <properties> 包含在 XML 輸出中。這對於在 CI 環境中跟蹤測試運行很有幫助。

具體來說,它在可用時包括以下環境變量:

環境變量屬性名稱描述
GITHUB_RUN_IDGITHUB_SERVER_URLGITHUB_REPOSITORYCI_JOB_URLciCI 構建信息
GITHUB_SHACI_COMMIT_SHAGIT_SHAcommitGit 提交標識符
系統主機名hostname機器主機名

這使得跟蹤特定測試運行的環境和提交變得更加容易。

當前限制

JUnit 報告器目前有一些限制,將在未來的更新中解決:

  • 單個測試的 stdoutstderr 輸出未包含在報告中
  • 每個測試用例的精確時間戳字段未包含

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:發生錯誤或異常時發出

Bun學習網由www.bunjs.com.cn整理維護