在许多情况下,Bun 的测试运行器可以无需代码更改即可运行 Jest 测试套件。只需运行 bun test
而不是 npx jest
、yarn test
等。
- $ npx jest
- $ yarn test
+ $ bun test
通常不需要更改代码。
- Bun 在内部将
@jest/globals
的导入重写为使用bun:test
的等效项。 - 如果您依赖 Jest 将
test
、expect
等注入为全局变量,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 支持
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 中无法工作。请在此处 跟踪其支持情况。
[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"
此处未提及的设置不受支持或没有等效项。如果缺少重要功能,请 提交功能请求。
另请参阅