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.extend()
  • expect().toMatchInlineSnapshot()
  • expect().toHaveReturned()

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

目前 jsdom 在 Bun 中不起作用,因为它在内部使用了 V8 API。在此 跟踪对其支持。

bunfig.toml
[test]
preload = ["./happy-dom.ts"]

--bail CLI 标志替换 Jest 配置中的 bail

bun test --bail 3

--coverage CLI 标志替换 collectCoverage

bun test --coverage

--test-timeout CLI 标志替换 testTimeout

bun test --timeout 10000

使用 bun test 时,许多其他标志变得无关紧要或过时。

  • transform — Bun 支持 TypeScript 和 JSX。其他文件类型可以使用 插件 进行配置。
  • extensionsToTreatAsEsm
  • haste — Bun 使用其自己的内部源映射
  • watchmanwatchPluginswatchPathIgnorePatterns — 使用 --watch 在监视模式下运行测试
  • verbose — 在 bunfig.toml 中设置 logLevel: "debug"

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

另请参阅