Skip to content

bun test 的文件發現機制確定哪些文件作為測試運行。了解其工作原理有助於你有效地組織測試文件。

默認發現邏輯

默認情況下,bun test 遞歸搜索項目目錄以查找符合特定模式的文件:

  • *.test.{js|jsx|ts|tsx} - 以 .test.js.test.jsx.test.ts.test.tsx 結尾的文件
  • *_test.{js|jsx|ts|tsx} - 以 _test.js_test.jsx_test.ts_test.tsx 結尾的文件
  • *.spec.{js|jsx|ts|tsx} - 以 .spec.js.spec.jsx.spec.ts.spec.tsx 結尾的文件
  • *_spec.{js|jsx|ts|tsx} - 以 _spec.js_spec.jsx_spec.ts_spec.tsx 結尾的文件

排除

默認情況下,Bun test 忽略:

  • node_modules 目錄
  • 隱藏目錄(以句點 . 開頭的目錄)
  • 沒有 JavaScript 類擴展名的文件(基於可用加載器)

自定義測試發現

位置參數作為過濾器

你可以通過向 bun test 傳遞額外的位置參數來過濾運行哪些測試文件:

bash
bun test <filter> <filter> ...

任何路徑包含其中一個過濾器的測試文件都將運行。這些過濾器是簡單的子字符串匹配,而不是 glob 模式。

例如,要運行 utils 目錄中的所有測試:

bash
bun test utils

這將匹配 src/utils/string.test.tslib/utils/array_test.js 等文件。

指定確切文件路徑

要在測試運行器中運行特定文件,請確保路徑以 .// 開頭,以區別於過濾器名稱:

bash
bun test ./test/specific-file.test.ts

按測試名稱過濾

要按名稱而不是文件路徑過濾測試,請使用 -t/--test-name-pattern 標志和正則表達式模式:

sh
# 運行名稱中包含 "addition" 的所有測試
bun test --test-name-pattern addition

模式針對測試名稱與所有父級 describe 塊的標簽連接的字符串進行匹配,用空格分隔。例如,定義為以下的測試:

ts
describe("Math", () => {
  describe("operations", () => {
    test("should add correctly", () => {
      // ...
    });
  });
});

將針對字符串 "Math operations should add correctly" 進行匹配。

更改根目錄

默認情況下,Bun 從當前工作目錄開始查找測試文件。你可以在 bunfig.toml 中使用 root 選項更改此設置:

toml
[test]
root = "src"  # 僅在 src 目錄中掃描測試

執行順序

測試按以下順序運行:

  1. 測試文件按順序執行(不並行)
  2. 在每個文件內,測試根據其定義順序按順序運行

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