在許多情況下,Bun 的測試運行器無需更改代碼即可運行 Jest 測試套件。只需運行 bun test 而不是 npx jest、yarn test 等。
sh
npx jest
yarn test
bun test通常無需更改代碼。
- Bun 內部重寫從
@jest/globals的導入以使用bun:test等效項。 - 如果你依賴 Jest 將
test、expect等作為全局變量注入,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。其他文件類型可以使用 插件 配置。extensionsToTreatAsEsmhaste— Bun 使用自己的內部 source mapswatchman、watchPlugins、watchPathIgnorePatterns— 使用--watch以 watch 模式運行測試verbose— 在bunfig.toml中設置logLevel: "debug"
此處未提及的設置不受支持或沒有等效項。如果缺少重要的內容,請提交功能請求。
另請參閱: