在许多情况下,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"
此处未提及的设置不受支持或没有等效项。如果缺少重要的内容,请提交功能请求。
另请参阅: