happy-dom
对于为前端代码和组件编写无头测试,我们推荐使用 happy-dom。Happy DOM 用纯 JavaScript 实现了一整套完整的 HTML 和 DOM API,使得可以高保真地模拟浏览器环境。 开始使用前,请将@happy-dom/global-registrator 包安装为开发依赖。
terminal
document 这样的浏览器 API 在全局作用域中可用。在项目根目录下创建一个名为 happydom.ts 的文件,并添加以下代码:
bun test 之前预加载此文件,请打开或创建 bunfig.toml 文件,并添加以下内容:
bunfig.toml
bun test 时会执行 happydom.ts。现在你就可以编写使用浏览器 API(如 document 和 window)的测试了。
TypeScript 支持
根据你的tsconfig.json 配置,以上代码中可能会出现“无法找到名称 ‘document’”的类型错误。为“注入”document 和其他浏览器 API 的类型,请在任意测试文件顶部添加以下三斜线指令。
bun test 来运行此测试:
terminal
React Testing Library
Bun 与 React Testing Library 无缝配合,可用于测试 React 组件。按照上述方法配置好 happy-dom 后,你可以正常安装并使用 React Testing Library。terminal
高级 DOM 测试
自定义元素
你可以使用相同的配置来测试自定义元素和 Web 组件:事件测试
测试 DOM 事件和用户交互:配置建议
全局设置
对于更复杂的 DOM 测试配置,你可以创建一个更完整的预加载文件:bunfig.toml:
bunfig.toml
故障排除
常见问题
TypeScript 对 DOM API 的错误:确保在测试文件顶部包含/// <reference lib="dom" /> 指令。
缺失全局变量:确保 @happy-dom/global-registrator 已正确导入并在预加载文件中注册。
React 组件渲染问题:确保已安装 @testing-library/react,且 happy-dom 配置正确。
性能考虑
happy-dom 性能很快,但对于非常大的测试套件,你可能需要:- 使用
beforeEach在测试间重置 DOM 状态 - 避免在单个测试中创建过多 DOM 元素
- 考虑使用测试库中的
cleanup函数