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 v1.2.19 起,您可以透過一個三斜槓指令為全域性測試函式啟用 **TypeScript 支援**。這使得從 Jest 遷移變得更加容易,因為您只需在整個專案中新增一次該指令

將此指令新增到專案中的**一個檔案**中,例如

  • 專案根目錄中的 `global.d.ts` 檔案
  • 您的測試 `preload.ts` 設定檔案(如果在 bunfig.toml 中使用 `preload`)
  • TypeScript 編譯中包含的任何單個 `.ts` 檔案
/// <reference types="bun-types/test-globals" />

新增後,專案中的所有測試檔案將自動獲得 Jest 全域性變數的 TypeScript 支援

math.test.ts
describe("my test suite", () => {
  test("should work", () => {
    expect(1 + 1).toBe(2);
  });

  beforeAll(() => {
    // setup code
  });

  afterEach(() => {
    // cleanup code
  });
});

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

一些值得注意的缺失功能

  • expect().toHaveReturned()

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

目前,jsdom 由於其內部使用 V8 API,在 Bun 中無法工作。請在此處 跟蹤其支援情況

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

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

bun test --bail=3

collectCoverage 替換為 --coverage CLI 標誌。

bun test --coverage

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

bun test --timeout 10000

使用 bun test 時,許多其他標誌變得無關緊要或已過時。

  • transform — Bun 支援 TypeScript 和 JSX。其他檔案型別可以使用 外掛 進行配置。
  • extensionsToTreatAsEsm
  • haste — Bun 使用其自己的內部源對映
  • watchman, watchPlugins, watchPathIgnorePatterns — 使用 --watch 在監視模式下執行測試
  • verbose — 在 bunfig.toml 中設定 logLevel: "debug"

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

另請參閱