Bun

指南測試執行器

從 Jest 遷移至 Bun 的測試執行器

在許多情況下,Bun 的測試執行器可以執行 Jest 測試套件,而無需變更程式碼。只要執行 bun test 即可,而非 npx jestyarn test 等。

- $ npx jest
- $ yarn test
+ $ bun test

通常不需要變更程式碼。

  • Bun 內部會將從 @jest/globals 的匯入重寫為使用 bun:test 等效項。
  • 如果您依賴 Jest 來注入 testexpect 等作為全域變數,Bun 也會執行此動作。

但是,如果您希望切換至 bun:test 匯入,也可以執行此動作。

import {test, expect} from "@jest/globals";
import {test, expect} from "bun:test";

Bun 實作了絕大多數 Jest 的比對器,但相容性尚未達到 100%。請參閱 文件 > 測試執行器 > 撰寫測試 中的完整相容性表格。

一些值得注意的遺失功能

  • expect.extend()
  • expect().toMatchInlineSnapshot()
  • expect().toHaveReturned()

如果您使用 testEnvironment: "jsdom" 在類似瀏覽器的環境中執行測試,您應該遵循 Bun 和 happy-dom 的 DOM 測試 指南,以將瀏覽器 API 注入至全域範圍。本指南依賴 happy-dom,它是 jsdom 的精簡且快速的替代方案。

目前 jsdom 無法在 Bun 中運作,因為它內部使用 V8 API。在此 追蹤 對它的支援。

bunfig.toml
[test]
preload = ["./happy-dom.ts"]

--bail CLI 旗標取代 Jest 設定檔中的 bail

bun test --bail 3

--coverage CLI 旗標取代 collectCoverage

bun test --coverage

--test-timeout CLI 旗標取代 testTimeout

bun test --timeout 10000

使用 bun test 時,許多其他旗標變得不相關或過時。

  • transform — Bun 支援 TypeScript 和 JSX。其他檔案類型可以使用 外掛程式 設定。
  • extensionsToTreatAsEsm
  • haste — Bun 使用它自己的內部來源對應
  • watchmanwatchPluginswatchPathIgnorePatterns — 使用 --watch 在監控模式下執行測試
  • verbose — 在 bunfig.toml 中設定 logLevel: "debug"

在此未提及的設定不受支援或沒有等效項。如果缺少重要功能,請 提交功能要求

另請參閱