返回博客

使用 Storybook 9 进行前端测试覆盖

Stories 为您提供免费的测试覆盖

loading
Dominic Nguyen
@domyen
最后更新

前端代码覆盖率一直令人沮丧。对于后端代码,你可以为每个函数编写单元测试,然后就大功告成了。但前端 UI 是动态的、有状态的,并且依赖于渲染上下文——比如浏览器、设备和用户偏好。这使得跟踪前端的代码覆盖率变得困难。传统的工具无法跟上现代应用程序中 UI 状态的爆炸式增长。

Storybook 9 聚焦前端代码覆盖率。 它会跟踪你的组件代码有多少被 story 所覆盖,从而让你能够精细地了解哪些需要测试。本文将展示如何通过 Storybook 将代码覆盖率集成到你的开发工作流程中。

为什么前端代码覆盖率很重要

前端测试的目的是验证 UI 的运行方式与用户体验一致。第一步是确认每个相关的组件状态都在测试中得到体现。

代码覆盖率会告诉你哪些状态在测试中缺失。它会扫描底层组件代码,突出显示哪些分支和条件被测试所覆盖——哪些没有。Storybook 会对代码覆盖率分析进行适配,使其能够直接与你的 *.stories 文件配合使用。

Story 免费提供广泛的覆盖率

当你编写 story 时,你会自然而然地记录 UI 的关键状态。在 Storybook 9 中,每个 story 都可以自动在三个维度上进行测试:

  • 交互 – 使用 Vitest 模拟真实的事件。
  • 可访问性 – 使用 axe-core 审计 WCAG 违规情况。
  • 视觉 – 使用 Chromatic 检测像素级的回归。

通过 Storybook 的代码覆盖率,你可以看到有多少组件代码被 story 所测试。这创造了一个紧密的反馈循环:

编写 story → 检查覆盖率 → 填补空白 → 重复

前端代码覆盖率工作流程

Storybook 9 包含了一个新的代码覆盖率工作流程,让你可以在开发环境中轻松测试、衡量和改进你的组件覆盖率。

1. 运行你的测试

只需点击一次或执行一个命令即可运行所有测试。Storybook 会针对每个 story 执行交互测试(Vitest)、可访问性检查(axe)和视觉测试(Chromatic)。

你可以直接在 Storybook 中使用内置的测试小部件运行测试,也可以在 CI 中无头模式下运行,完全无需启动 Storybook UI。

Storybook's test widget, showing a 56% coverage summary

2. 查看未覆盖的内容

代码覆盖率报告会突出显示:

  • 没有 story 的组件。
  • 未被任何 story 覆盖的代码行。
  • 未被测试过的分支和 prop 组合。

它由 Vitest 提供支持,并与 Istanbul 等行业工具完全兼容,因此你可以将前端指标包含在与后端和服务层覆盖率相同的报告中。

Two browser windows. The foreground is an interactive coverage report showing Card to be the only source file with poor coverage. The background is the Storybook app.

深入查看此示例中的 Card 组件,我们可以看到 CardAction 和 CardFooter 子组件尚未被测试。

The source code of the Card component and it sub-components, annotated with coverage reporting. The CardAction and CardFooter functions are uncovered.

3. 填补空白

Storybook 包含用于快速提高覆盖率的工具。

对于没有 story 的组件:

点击“添加 story”按钮,用默认参数生成一个新的 story 文件,或者手动编写一个 *.stories.ts 文件。

Storybook's sidebar with the "Add new component" button highlighted

对于部分覆盖的组件:

使用 Controls 面板调整 prop,然后点击“创建新的 story”来捕获该状态作为一个新的 story。或者手动编写一个 story 来定位某个分支或 prop 配置。

A toolbar with three buttons, Save, New, and Reset. A status text says "Unsaved changes"

4. 重新运行测试套件进行确认

添加 story 后,重新运行你的测试。代码覆盖率报告会立即更新,显示哪些代码行现在已被覆盖。

可以看到,我们为 CardAction 和 CardFooter 添加的新 story 使我们获得了完全的覆盖率。

Two browser windows. The foreground is an interactive coverage report showing all files to have full coverage. The background is the Storybook app.

Storybook 在你的前端测试策略中的定位

测试类型 优势 局限性
端到端(E2E) 验证跨系统的真实用户流程。 速度慢、不稳定、覆盖范围有限。
Storybook 测试 UI 状态覆盖率高、速度快、稳定。 不测试完整的应用程序行为。

每种测试类型都解决了独特的问题。要实现全面的测试策略,两者缺一不可。

  • 端到端测试对于验证关键用户流程——登录、结账、入门——至关重要。但它们编写和维护成本高昂,这限制了有多少应用程序值得用它们来测试。
  • Storybook 测试接力 E2E 的不足,通过广泛覆盖组件的全部表面积——props、主题、边缘情况、视口等等。所有这些都没有不稳定或维护开销。

利用 AI 加速代码覆盖率

驱动 Cursor、ChatGPT、Claude 和 Windsurf 的基础模型在数千个 story 上进行了训练。这使得它们可以直接从你的组件代码生成 story。

Storybook 的代码覆盖率工具帮助你辨别哪些需要覆盖。AI 可以帮助你为未被测试的 UI 添加必要的 story。虽然它并不完美,但它是一个坚实的基础,你可以在之后对其进行改进。


开始上手

Storybook 9 为你提供了一个集中的工作流程,用于编写、测试和跟踪 UI 代码覆盖率。它有助于确保即使是最晦涩的边缘情况也能按预期运行。并且它与你现有的代码覆盖率工具集成,让整个团队都能了解哪些内容已被测试。

你已经在使用 story。Storybook 9 显示了它们覆盖了多少前端代码。在新项目中试用一下吧!

npm create storybook@latest

如果您已经有一个现有的 Storybook 项目,请先将其升级到 Storybook 9。使用我们的自动化迁移向导来帮助您完成整个过程

npx storybook@latest upgrade

我们还创建了一个 迁移指南 来帮助填补空白。


了解更多

如果你想了解更多信息或有任何疑问,我们下周将举办一个关于 Storybook 中代码覆盖率的在线直播活动。

🗓️ 6月26日 | 🕗 ET时间下午12:00 / CET时间下午18:00
📍 Zoom 直播网络研讨会
🔗 立即注册 →


我们最新的博文介绍了如何使用 Storybook 9 中的代码覆盖率报告来确保你的组件得到充分的测试。

Storybook (@storybook.js.org) 2025-06-18T18:38:01.074Z

加入 Storybook 邮件列表

获取最新消息、更新和发布信息

7,468开发者及更多

我们正在招聘!

加入 Storybook 和 Chromatic 团队。构建被数十万开发人员在生产中使用的工具。远程优先。

查看职位

热门帖子

前端团队的可访问性管道

Storybook 9 如何将可访问性集成到开发生命周期的每个部分
loading
Dominic Nguyen

Storybook 臃肿?已修复。

我们如何将 Storybook 的包大小减半
loading
Michael Shilman

Storybook 9

精益、高效的组件测试利器
loading
Michael Shilman
加入社区
7,468开发者及更多
原因为什么选择 Storybook组件驱动的 UI
文档指南教程更新日志遥测
社区插件参与进来博客
展示探索项目组件词汇表
开源软件
Storybook - Storybook 中文

特别感谢 Netlify CircleCI