返回博客

Storybook Test 抢先看

多模态测试,在浏览器中即时反馈

loading
Michael Shilman
@mshilman
最后更新于

每个人都被前端测试搞得焦头烂额。开发者想创建很棒的功能,但却被调试不稳定或维护测试套件分散了精力。就连 Rails 的创建者 DHH 也宣布系统测试破产

前端测试似乎非常“高尚”,以至于没人追究它拖慢我们所有人的责任。即使是最优秀的团队也曾试图用质量换速度,结果却一无所获。

在 Storybook,我们相信仍有希望。数月以来,我们一直在构建 Storybook Test,这是一款用于快速、稳定的 UI 测试的工具。现在,我们终于准备好与您分享它了。

⚡️ 在浏览器中运行的极速测试
🌈 同时进行组件、可视化和无障碍测试
🚦 在 Storybook 内部可视化结果
👉 在您自己的浏览器中点击调试
🌐 针对测试覆盖率进行优化
💻 通过 Vitest 集成 VSCode


📋 立即申请早期访问!


为什么还要费心测试你的前端?

在功能开发和修复 bug 之间来回切换会拖慢你的团队。你希望交付高质量的用户体验,但当你的应用程序持续开发时,很难防止回归。这对用户来说很糟糕,因为他们会遇到不稳定软件。这对你来说也很令人沮丧,因为修复 bug 就像永无止境的跑步机。

测试让你能够在开发过程中尽快找到 bug。因为晚些时候找到它们对你的团队来说成本可能会高出 10 到 100 倍(美国宇航局研究)。

Chart showing a rising cost of fixing bugs as the process stage goes from development, to qa, to production. The beginning of the chart, where cost is low, is labeled with "Storybook catches bugs here"

前端测试的问题

询问开发者他们的测试挑战,你会得到无数个答案。我们采访了几十个团队,列出了一个简短列表

❌ 运行缓慢
❌ 不稳定测试导致假阳性
❌ 工具笨重
❌ 调试痛苦
❌ 不在浏览器中运行
❌ 编写和维护成本高昂

所有这些问题的共同点在于,前端代码旨在用于 Web 浏览器。测试工具需要竭尽全力来适应浏览器环境。

端到端 (E2E) 测试是测试前端最准确的方式,但运行缓慢且成本高昂,因为必须启动一个独立的浏览器环境。单元测试编写/运行速度快,但使用一个模拟的浏览器环境。

如果你能平衡 E2E 测试的保真度和单元测试的速度呢?

The Web Browser is an integration target all frontend tests have to workaround

我们对 Storybook Test 的愿景

我们正在创建一个专注于组件和故事的测试工具。我们相信这是解决前端测试问题的最佳方式:运行慢、不稳定、成本高、覆盖率低。

Storybook 是组件开发的行业标准。目前已经编写了超过 3000 万个故事。如果你仔细看,故事实际上就是你在浏览器中手动验证的测试。而且它们非常快速 + 可靠,因为它们不需要加载你的整个应用(后端、API 等)——它们加载 UI 并模拟其余部分。

多年来,我们与 Cypress 组件测试 (CT)、Playwright CT、Jest 和 Vitest 背后的团队合作,在这些测试环境中重用故事。但你仍然需要在工具之间切换并自己维护工具链,这增加了不少开销。

Storybook Test 将一流的工具直接集成到 Storybook 本身。你可以获得超能力,使用 Vitest 运行组件测试,使用 Chromatic 运行可视化测试,以及使用 Axe 运行无障碍测试。所有这些都在真实的浏览器中同时以极快的速度运行。测试结果显示在 Storybook 应用中故事旁边。

Illustration showing how three testing types flow into Storybook. First, Component test with Vitest. Does UI render and respond to user behavior? Second, Visual test with Chromatic. Does UI look right down to the pixel? Third, Accessibility test with Axe. Does UI work for screen readers & keyboard-only? Those each flow into Instant feedback in Storybook. Multi-modal tests run in real browsers at the same time.

Storybook Test 预览

我们与 Vitest 合作,创建了编写、运行和调试各类前端测试(包括组件、可视化甚至无障碍测试)的最佳方式。只需点击几下,你就可以将 Storybook 故事作为测试运行,隔离失败,并在你喜欢的 Web 浏览器中进行调试。

0:00
/0:10

同时测试所有故事并在上下文中修复错误

让我们分解一下。

首先,将故事作为测试。利用 Vitest 和可移植故事的力量,Storybook Test 会自动将你的故事转换为快速可靠的 Vitest 测试。所有故事都成为冒烟测试,验证它们是否无错误渲染。此外,如果一个故事具有play 函数,该函数将作为测试的一部分运行,并且其断言会被验证。

其次,隔离失败。Storybook 的侧边栏是你的组件及其变体的目录。现在,它也是快速定位失败测试的最快途径。测试运行后,其状态会显示在侧边栏中。如果测试失败,点击侧边栏底部的红色失败计数,即可过滤显示失败的故事。

第三,在你的浏览器中调试。当你选择一个测试失败时,Storybook 会为每种测试类型提供专门的 UI,帮助你找出问题所在。

组件测试

组件测试使用新的组件测试插件面板,该面板演示了测试的每一步,并提供了前后步进的调试工具。这允许你在失败的确切时刻,在相同的环境中,使用浏览器开发工具进行调试。

在 Storybook Test 之前,我们将这些称为交互测试,并在交互插件面板中查看。

组件测试调试

可视化测试

可视化测试失败会打开可视化测试插件面板,显示你的更改的差异视图,你可以选择接受这些更改作为预期结果,或者更新代码直到测试通过。

可视化测试调试

无障碍测试

无障碍测试失败会打开无障碍插件面板,显示违规列表,画布上高亮显示每个违规元素,并提供解决问题的建议。

无障碍测试调试

加入早期访问计划

为启动该项目,我很高兴宣布一项早期访问计划,以便与 Storybook 社区的各位一起实现这一愿景。该计划将从 11 月 6 日持续到 12 月 16 日。

  1. 专属 Discord,获得 Storybook 维护者的亲手帮助
  2. 定期答疑时间
  3. 支持和故障排除
  4. 与团队成员和特邀专家进行在线会议
  5. 最新 RFC、功能和修复的预发布

主要要求是你拥有 (1) 一个在 Storybook 中的前端项目,以及 (2) 渴望在 UI 测试领域开辟新天地。

使用下方表格申请早期访问计划,我们将与您联系告知后续步骤。如果需求超出我们的承受能力,我们可能会关闭申请...所以请立即申请。

👉👉 立即申请早期访问!👈👈

常见问题:这与 Storybook Test Runner 有何关系?
Storybook 的Test Runner 是 Storybook Test 的一个较旧的、仅限 CLI 的版本,使用 Jest+Playwright 实现。Storybook Test 是 Test Runner 的最新演进,更快、更可靠、更易于配置。它既可以在 CLI 中运行,也可以在 Storybook 的 UI 中运行。

仅限 CLI 的 Test Runner 被广泛使用,并且是测试 Webpack/Rspack 项目中故事的唯一方式。在可预见的未来,我们将继续维护它。但是,我们不打算为其扩展我们在 Storybook Test 中构建的新功能,例如集成到 Storybook 的侧边栏。

如果您当前在 Vite 或 Next.js 项目中使用 Test Runner,我们建议您在早期访问计划期间尝试 Storybook Test!

加入 Storybook 邮件列表

获取最新新闻、更新和发布

7,180开发者及还在增长

我们正在招聘!

加入 Storybook 和 Chromatic 的团队。构建被成千上万开发者用于生产环境的工具。远程优先。

查看职位

热门文章

Storybook 8.4

一键在浏览器中进行组件测试
loading
Michael Shilman

测试 RSC 组件

在浏览器中快速完整测试 React Server Components
loading
Michael Shilman

React Native Storybook 8

React Native 回归啦!
loading
Michael Shilman
加入社区
7,180开发者及还在增长
关于为什么选择 Storybook组件驱动的 UI
文档指南教程更新日志遥测
社区插件参与其中博客
展示探索项目组件术语表
开源软件
Storybook - Storybook 中文

特别感谢 Netlify CircleCI