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 实现了 Jest 的绝大多数匹配器,但兼容性尚未达到 100%。请参阅 文档 > 测试运行器 > 编写测试 中的完整兼容性表。

一些值得注意的缺失功能

  • expect().toHaveReturned()

如果您使用 testEnvironment: "jsdom" 在类似浏览器的环境中运行测试,则应遵循 使用 Bun 和 happy-dom 进行 DOM 测试 指南,将浏览器 API 注入到全局作用域中。本指南依赖于 happy-dom,它是 jsdom 的更精简、更快速的替代方案。

目前,由于 jsdom 内部使用了 V8 API,因此在 Bun 中无法工作。在此处跟踪对其的支持 here

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 使用其自己的内部源映射
  • watchmanwatchPluginswatchPathIgnorePatterns — 使用 --watch 在监视模式下运行测试
  • verbose — 在 bunfig.toml 中设置 logLevel: "debug"

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

另请参阅