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

查詢測試

瞭解 Bun 的測試執行器如何發現和篩選專案中的測試檔案

bun test 通過將檔案路徑與一組模式進行匹配,來決定將哪些檔案作為測試執行。

預設發現邏輯

預設情況下,bun test 會遞迴搜尋專案目錄,查詢匹配以下模式的檔案:

  • *.test.{js|jsx|ts|tsx|mjs|cjs|mts|cts} - 以 .test.js、.test.jsx、.test.ts、.test.tsx、.test.mjs、.test.cjs、.test.mts 或 .test.cts 結尾的檔案
  • *_test.{js|jsx|ts|tsx|mjs|cjs|mts|cts} - 以 _test.js、_test.jsx、_test.ts、_test.tsx、_test.mjs、_test.cjs、_test.mts 或 _test.cts 結尾的檔案
  • *.spec.{js|jsx|ts|tsx|mjs|cjs|mts|cts} - 以 .spec.js、.spec.jsx、.spec.ts、.spec.tsx、.spec.mjs、.spec.cjs、.spec.mts 或 .spec.cts 結尾的檔案
  • *_spec.{js|jsx|ts|tsx|mjs|cjs|mts|cts} - 以 _spec.js、_spec.jsx、_spec.ts、_spec.tsx、_spec.mjs、_spec.cjs、_spec.mts 或 _spec.cts 結尾的檔案

排除項

預設情況下,bun test 會忽略:

  • node_modules 目錄
  • 隱藏目錄(以句點 . 開頭的目錄)
  • 不具有類似 JavaScript 副檔名的檔案(基於可用的載入器)

自定義測試發現

位置引數作為過濾器

要過濾要執行的測試檔案,請向 bun test 傳入額外的位置引數:

terminal
bun test <filter> <filter> ...

任何路徑包含其中一個過濾器的測試檔案都會執行。過濾器是子字串匹配,而不是 glob 模式。

例如,執行 utils 目錄下的所有測試:

terminal
bun test utils

這會匹配諸如 src/utils/string.test.ts 和 lib/utils/array_test.js 這樣的檔案。

指定精確檔案路徑

要在測試執行器中執行特定檔案,確保路徑以 ./ 或 / 開頭,以區別於過濾器名稱:

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

按測試名稱過濾

要根據測試名稱而非檔案路徑過濾測試,使用 -t/--test-name-pattern 選項並傳入正規表示式模式:

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

bun test 會將模式與測試名稱進行匹配,測試名稱字首為其所有父級 describe 塊的標籤,各標籤之間以空格分隔。例如,定義如下的測試:

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

對於此測試,bun test 會將模式與字串 "Math operations should add correctly" 進行匹配。

更改根目錄

預設情況下,Bun 會從當前工作目錄開始查詢測試檔案。可以在 bunfig.toml 中使用 root 選項進行更改:

bunfig.toml
[test]
root = "src"  # 僅掃描 src 目錄下的測試

執行順序

測試按以下順序執行:

  1. 測試檔案會按順序執行,或通過 --parallel 在多個工作行程中執行
  2. 在每個檔案中,測試會按照定義順序依次執行