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"

此处未提及的设置不受支持或没有等效项。如果缺少重要功能,请 提交功能请求

另请参阅