Skip to main content
在许多情况下,Bun 的测试运行器可以在不修改代码的情况下运行 Jest 测试套件。只需运行 bun test 而不是 npx jestyarn test 等。
terminal
npx jest
yarn test
bun test

通常不需要修改代码。
  • Bun 在内部将来自 @jest/globals 的导入重写为使用 bun:test 的等价物。
  • 如果您依赖 Jest 注入 testexpect 等作为全局变量,Bun 也这样做。
但如果要切换到 bun:test 导入,也可以这样做。
https://mintcdn.com/teemo/2s-4Z6VdGqiCeBNX/icons/typescript.svg?fit=max&auto=format&n=2s-4Z6VdGqiCeBNX&q=85&s=087b260066909db1cd3e9c7292bc34b2test.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] 文件
https://mintcdn.com/teemo/2s-4Z6VdGqiCeBNX/icons/typescript.svg?fit=max&auto=format&n=2s-4Z6VdGqiCeBNX&q=85&s=087b260066909db1cd3e9c7292bc34b2global.d.ts
/// <reference types="bun-types/test-globals" />

添加后,项目中的所有测试文件都会自动获得 Jest 全局变量的 TypeScript 支持:
https://mintcdn.com/teemo/2s-4Z6VdGqiCeBNX/icons/typescript.svg?fit=max&auto=format&n=2s-4Z6VdGqiCeBNX&q=85&s=087b260066909db1cd3e9c7292bc34b2math.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 的更轻量且更快的替代品。 由于内部使用 V8 API,jsdom 目前在 Bun 中无法工作。请在此处跟踪支持情况 链接
bunfig.toml
[test]
preload = ["./happy-dom.ts"]

在 Jest 配置中用 --bail CLI 标志替换 bail
terminal
bun test --bail=3

--coverage CLI 标志替换 collectCoverage
terminal
bun test --coverage

--test-timeout CLI 标志替换 testTimeout
terminal
bun test --timeout 10000

使用 bun test 时,许多其他标志变得无关紧要或过时。
  • transform — Bun 支持 TypeScript & JSX。其他文件类型可通过 插件 配置。
  • extensionsToTreatAsEsm
  • haste — Bun 使用其自己的内部源映射
  • watchmanwatchPluginswatchPathIgnorePatterns — 使用 --watch 在监视模式下运行测试
  • verbose — 在 bunfig.toml 中设置 logLevel: "debug"

此处未提及的设置不受支持或没有等价物。如果缺少重要内容,请提交功能请求
另请参阅: