Skip to main content
Bun 的测试运行器与现有的组件和 DOM 测试库配合良好,包括 React Testing Library 和 happy-dom。

happy-dom

对于前端代码和组件的无头测试,我们推荐使用 happy-dom。它实现了纯 JavaScript 中完整的 HTML 和 DOM API 集合,因此可以高保真地模拟浏览器环境。 安装 @happy-dom/global-registrator 包作为开发依赖。
terminal
使用 Bun 的预加载功能在测试运行前注册 happy-dom 全局变量,这会使浏览器 API(如 document)在全局作用域中可用。在项目根目录创建一个名为 happydom.ts 的文件,包含以下代码:
happydom.ts
要在 bun test 之前预加载此文件,请打开或创建一个 bunfig.toml 文件并添加以下行。
bunfig.toml
现在 bun test 会在你的测试之前执行 happydom.ts,因此测试可以使用诸如 document 和 window 之类的浏览器 API。
dom.test.ts

TypeScript 支持

根据你的 tsconfig.json 设置,你可能会在上面代码中看到”Cannot find name ‘document‘“的类型错误。要加载 document 和其他浏览器 API 的类型,请在任何测试文件的顶部添加以下三斜杠指令。
dom.test.ts
使用 bun test 运行测试:
terminal

React Testing Library

Bun 可以与 React Testing Library 配合测试 React 组件。按照前述方法设置 happy-dom 后,正常安装和使用 React Testing Library。
terminal
component.test.tsx

高级 DOM 测试

自定义元素

使用相同的设置测试自定义元素和 Web 组件:
custom-element.test.ts

事件测试

测试 DOM 事件和用户交互:
events.test.ts

配置技巧

全局设置

对于更复杂的设置,创建一个也注册全局模拟的预加载文件:
test-setup.ts
然后更新你的 bunfig.toml:
bunfig.toml

故障排除

常见问题

DOM API 的 TypeScript 错误:在测试文件顶部加上 /// <reference lib="dom" /> 指令。 缺少全局变量:检查你的预加载文件是否导入并注册了 @happy-dom/global-registrator。 React 组件渲染问题:检查是否安装了 @testing-library/react 并且 happy-dom 已设置。

性能考量

happy-dom 速度很快,但对于非常大的测试套件,你可能需要:
  • 使用 beforeEach 在测试之间重置 DOM 状态
  • 避免在单个测试中创建太多 DOM 元素
  • 使用测试库的 cleanup 函数
test-setup.ts