Skip to content

在許多情況下,Bun 的測試運行器無需更改代碼即可運行 Jest 測試套件。只需運行 bun test 而不是 npx jestyarn test 等。

sh
npx jest
yarn test
bun test

通常無需更改代碼。

  • Bun 內部重寫從 @jest/globals 的導入以使用 bun:test 等效項。
  • 如果你依賴 Jest 將 testexpect 等作為全局變量注入,Bun 也會這樣做。

但如果你更願意切換到 bun:test 導入,也可以這樣做。

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

自 Bun v1.2.19 起,你可以使用單個三斜槓指令為全局測試函數啟用 TypeScript 支持。這使得從 Jest 遷移變得更加容易,因為你只需在整個項目中添加一次指令:

將此指令添加到項目中的一個文件,例如:

  • 項目根目錄中的 global.d.ts 文件
  • 測試 preload.ts 設置文件(如果在 bunfig.toml 中使用 preload
  • TypeScript 包含在編譯中的任何單個 .ts 文件
ts
/// <reference types="bun-types/test-globals" />

添加後,項目中所有測試文件自動為 Jest 全局變量獲得 TypeScript 支持:

ts
describe("我的測試套件", () => {
  test("應該工作", () => {
    expect(1 + 1).toBe(2);
  });

  beforeAll(() => {
    // 設置代碼
  });

  afterEach(() => {
    // 清理代碼
  });
});

Bun 實現了絕大多數 Jest 匹配器,但兼容性尚未達到 100%。請參閱 文檔 > 測試運行器 > 編寫測試 的完整兼容性表。

一些值得注意的缺失功能:

  • expect().toHaveReturned()

如果你使用 testEnvironment: "jsdom" 在類似瀏覽器的環境中運行測試,你應該遵循 使用 Bun 和 happy-dom 進行 DOM 測試 指南將瀏覽器 API 注入到全局作用域。本指南依賴於 happy-dom,它是 jsdom 的更精簡和更快的替代方案。

目前 jsdom 在 Bun 中無法工作,因為它內部使用了 V8 API。請在此跟蹤支持情況

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

將 Jest 配置中的 bail 替換為 --bail CLI 標志。

sh
bun test --bail=3

collectCoverage 替換為 --coverage CLI 標志。

sh
bun test --coverage

testTimeout 替換為 --test-timeout CLI 標志。

sh
bun test --timeout 10000

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

  • transform — Bun 支持 TypeScript 和 JSX。其他文件類型可以使用 插件 配置。
  • extensionsToTreatAsEsm
  • haste — Bun 使用自己的內部 source maps
  • watchmanwatchPluginswatchPathIgnorePatterns — 使用 --watch 以 watch 模式運行測試
  • verbose — 在 bunfig.toml 中設置 logLevel: "debug"

此處未提及的設置不受支持或沒有等效項。如果缺少重要的內容,請提交功能請求


另請參閱:

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