Skip to content

关于测试

图片demo

这份报告是 Vitest 测试运行器结合 Istanbul 生成的代码覆盖率报告。以下是各部分的详细解释:


顶部摘要 (Summary)

指标说明当前值
Statements可执行语句覆盖率6.61% (89/1210)
Branches条件分支覆盖率(如 if/else66.66% (24/26)
Functions函数/方法调用覆盖率50% (13/24)
Lines代码行覆盖率6.61% (169/1210)

测试状态概览

  • FALL (0):失败测试数(0 表示全部通过)
  • RUNNING (0):运行中测试数(0 表示无测试进行中)
  • PASS (1):通过测试数(1 个测试通过)
  • SKIP (--):跳过测试数(-- 表示未统计或无数值)

在代码覆盖率报告(如Istanbul/nyc生成的报告)中,1x 表示该行代码在测试过程中被成功执行了1次。这是覆盖率工具对代码执行频率的可视化标记系统,具体含义如下:

不同标记的含义

标记含义视觉表现
1x代码被执行了1次通常显示为绿色背景
2x, 3x代码被执行了多次数字越大颜色越深绿
0x代码从未被执行显示为红色背景
I忽略的代码(如注释)灰色或无背景色
E执行出错的代码黄色或橙色背景

为什么关注"1x"

  1. 最低通过标准:1x表示代码至少被测试覆盖一次
  2. 质量指标
    • 关键代码应有更高执行次数(如3x+)
    • 1x可能暗示边缘case覆盖不足
  3. 风险识别
    • 所有1x代码需验证是否包含分支逻辑
    • 高频方法(3x+)应检查性能影响

💡 最佳实践:核心业务逻辑的目标执行次数应≥3x,而工具类方法保持1x即可接受。

jsdom 和 happy-dom

jsdomhappy-dom 都是用于在 Node.js 环境中模拟浏览器 DOM 的 JavaScript 库,但它们的设计目标、性能表现和功能支持有所不同。以下是两者的核心区别:


1. 设计目标与主要用途

特性jsdomhappy-dom
主要用途通用 DOM 模拟,兼容传统 Web 标准专注于 Web Components 和 SSR(服务器端渲染)
性能优化较慢(尤其在 23.2.0 版本后性能下降)更快,专为高效 DOM 操作优化
适用场景测试、爬虫、传统 DOM 操作现代前端框架(如 Lit、Stencil)、SSR、测试

关键差异

  • jsdom 更通用,但性能较差,尤其是在复杂选择器操作时。
  • happy-dom 针对 Web Components 和 SSR 优化,执行速度更快。

2. 性能对比

操作jsdom (ms)happy-dom (ms)
HTML 解析25626
序列化 HTML658
渲染自定义元素21419
querySelectorAll4.9–10.40.7–3.8

结论

  • happy-dom 在 DOM 操作和解析方面比 jsdom5–10 倍
  • jsdom 23.2.0 版本因更换选择器引擎导致性能显著下降(如 querySelector 慢 800 倍)。

3. 功能支持

功能jsdomhappy-dom
Shadow DOM✅(更优支持)
MutationObserver
Fetch API
CSSOM 支持✅(部分优化)
<details> 元素✅(标准)✅(旧版有差异,已修复)
文件加载控制❌(默认加载)✅(可禁用 JS/CSS 加载)

关键差异

  • happy-dom 允许禁用文件加载(disableJavaScriptFileLoading),适合单元测试。
  • jsdom 对传统 Web API 支持更完整,但 happy-dom 更适合现代 Web Components 开发。

4. 兼容性与 SEO 优化

方面jsdomhappy-dom
SSR 优化✅(专为 SSR 设计)
SEO 友好✅(预渲染支持更好)
TypeScript 支持✅(v18+ 类型更严格)

结论

  • 如果项目需要 服务器端渲染(SSR)SEO 优化happy-dom 是更好的选择。
  • jsdom 适合需要 完整浏览器模拟 但不太关注性能的场景。

5. 临时解决方案与版本问题

  • jsdom 性能问题
    • 23.2.0 版本因选择器引擎变更导致性能下降,可回退到 23.1.0 或使用优化版 dom-selector
  • happy-dom 行为差异
    • 旧版对 <details> 元素的 open 属性处理与浏览器不一致,但最新版本已修复。

总结:如何选择?

  • happy-dom 如果
    • 需要 高性能 DOM 操作(如测试、SSR)。
    • 项目基于 Web Components 或需要 Shadow DOM 支持。
    • 希望 禁用文件加载 以加速单元测试。
  • jsdom 如果
    • 需要 最接近真实浏览器的行为(如爬虫、复杂 DOM 测试)。
    • 依赖 旧版 Web API 或无法升级到 happy-dom

最新趋势:越来越多的现代框架(如 Vitest)开始默认使用 happy-dom 替代 jsdom,因其更快的速度和更低的资源占用。

Released under the MIT License.