執行環境套件管理器打包器測試執行器程式碼檢查格式化指南參考部落格意見回饋

測試報告工具

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