返回博客

Storybook 8.1

一个更具生产力、更井然有序、更可预测的 Storybook

loading
Michael Shilman
@mshilman
最后更新

Storybook 是行业标准的 UI 组件构建、测试和文档编写工作坊。每天有数千名开发者使用它,其中包括 BBC、Etsy 和 Dropbox 的团队。

在过去的一年里,我们专注于生活质量的维护工作。这最终促成了我们于三月份发布的 Storybook 8.0,这是我们迄今为止性能最好、最稳定的版本。

现在进入 8.x 版本,我们又重新开始致力于改善您的 UI 开发体验。为了启动这一过程,我很高兴地宣布一个更高效、更有条理、更可预测的 Storybook 8.1。

  • 🤖 自动生成 Story 并通过控件保存
  • 🥸 类型安全的、基于标准的模块模拟
  • ⚛️ 单元测试 React Server Components
  • 🧳 用于 Playwright 组件测试的可移植 Stories
  • 💯 数百项其他改进

用于创建和编辑 Story 的新 UI

Storybook 的原子单位是Story,一个捕捉组件示例的小段 JavaScript。我们一直努力使 Stories 易于阅读和编写,但在 8.1 版本中,我们做得更多:您现在可以从 Storybook 的 UI 中创建和编辑 Stories,React 项目也可以为新组件添加 Stories。想了解更多,请阅读 完整公告 或查看 官方文档

0:00
/0:19

为 Avatar 组件创建一个新的生成 Stories 文件

类型安全的模块模拟

组件可以依赖各种输入和上下文,例如需要在上下文内部渲染或从网络请求接收数据。在开发和测试时,您通常需要模拟这些依赖项。

Storybook 支持多种模拟方式:从向组件传递 props,到用控制样式或上下文的装饰器包装它们,再到使用 Mock Service Worker (MSW) 模拟网络请求。

在 8.1 版本中,我们在 Storybook 中添加了模块模拟功能。这允许您灵活地用受控的替换项替换 JS 模块。您可以使用此功能来模拟来自浏览器 cookie、本地存储或元框架功能(如您的应用程序路由器)的组件输入。

我们的模块模拟是完全类型安全的,而且最重要的是,它是完全基于标准的。想了解更多,请阅读我们的 详细文章 或查看 官方文档

A screenshot of a portion of a `package.json` file containing the code: {   "type": "module",   "imports": {     "#lib/db": {       "storybook": "./lib/db.mock.ts",       "default": "./lib/db.ts"     },     "#*": [       "./*",       "./*.ts",       "./*.tsx"     ]   } }
此配置将为 lib/db 模块添加一个绝对导入,并在 Storybook 中时自动导入模拟文件。

单元测试 React Server Components

与端到端测试 (E2E) 不同,单元测试更快、更不易出错,并且允许您分解 UI 及其测试,以便更容易地验证关键状态。Storybook 的新模块模拟功能使我们能够通过模拟服务器组件依赖的模块来单元测试 React Server Components (RSCs)。这是 React 的一项重大进步,因为到目前为止,React 还没有为 RSC 提供单元测试策略。

由于 RSC 目前主要用于 Next.js 项目,这项工作的大部分涉及创建 许多 Next.js 模块的模拟版本。这些模拟会自动被监视,并添加关键功能(例如能够设置 cookie 值),您可以在 Stories 中直接使用它们。想了解更多,请 查看我们的示例仓库,并期待完整的公告。

A screenshot of the `noteDetail.stories.ts` file, containing the code: import { cookies } from '@storybook/nextjs/headers.mock';  import { createUserCookie, userCookieKey } from '#lib/cookie'; import Page from './noteDetail';  const meta = {   component: Page, // Use an RSC component in Storybook!   async beforeEach() {     // Set a Next.js cookie before each story is rendered     cookies().set(userCookieKey, await createUserCookie('alice'))   },   parameters: {     nextjs: {       navigation: { pathname: '/note/[id]', query: { id: '1' } },     },   }, } satisfies Meta<typeof Page>
一个用于 RSC Next.js 页面组件的 Stories 文件,使用模拟的 cookie 工具设置 cookie 值。
有什么比为 UI 组件编写单元测试更好?视觉测试!我们刚刚推出了 Visual Tests 插件,可以在不离开 Storybook 的情况下,跨多个浏览器和视口自动测试 Stories。开发更快,更有信心。

用于 Playwright 组件测试的可移植 Stories

在 Storybook 中开发的最大好处之一是您免费获得了测试。每个隔离的组件示例(或“Story”)都是一个 UI 测试。如果您想测试数据获取和用户交互,Storybook 也有相应的工具。

现在,这是第一次有可能轻松地在 Playwright 的实验性组件测试中重用这些 Stories。这种工作流程将 Storybook 的组件开发和文档与 Playwright 强大的测试功能相结合。想了解更多,请 阅读完整公告查看官方文档

0:00
/0:26

使用 Playwright 的 VS Code 扩展基于 Story 录制测试

数百项改进

除了上述功能,每个 Storybook 版本都包含各个级别的数百项改进和 bug 修复。以下是一些亮点:

立即试用

Storybook 8.1 今日可用。在新项目中尝试它

npx storybook@latest init

或升级现有项目

npx storybook@latest upgrade

如果您是从 7.x 升级,我们有指南可以帮助您。我们还有 一份从旧版本迁移的指南

下一步

我们专注于 8.2 的两个主要项目:

  1. 减小 Storybook 的安装占地空间和版本冲突
  2. 添加 Story 生命周期钩子,以与其他测试工具保持一致

要了解我们正在进行的工作和考虑事项的最新情况,请查看 Storybook 的新路线图

鸣谢

非常感谢对 Storybook 8.1 的 58 位贡献者的 PR!

@43081j @abiriadev @ariperkkio @arnabsen @balazsorban44 @bashmish @benmccann @cdedreuille @chakas3 @cherry @deining @drik98 @eric-blue @ethriel3695 @fatcat560 @fyodorovandrei @ghengeveld @glenjamin @goodactive @hakshu25 @imgbotapp @inokawa @johnendson @jonniebigodes @jorge-ji @joshwooding @jpzwarte @jreinhold @justingish @jwilliams-met @kasperpeulen @kylegach @larsdouweschuitema @larsrickert @laurens94 @leeovictor @lifeiscontent @ndelangen @nkabrown @noranda @r4ai @rui-silva-beqom @scottdotjs @seanparmelee @shilman @shuta13 @simenb @sni-j @spanishpear @takurinton @tmeasday @tobbe @valentinpalkovic @vanessayuenn @xyy94813 @yannbf @yuemori @yukikitagata

加入 Storybook 邮件列表

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

7,468开发者及更多

我们正在招聘!

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

查看职位

热门帖子

Storybook 中的类型安全模块模拟

一种新的、基于标准的模拟方法
loading
Jeppe Reinhold

交互式故事生成

无需离开浏览器,即可在几秒钟内创建您的第一个故事!
loading
Valentin Palkovic

用于 Playwright 组件测试的可移植 Stories

通过最少的设置即可在 Playwright CT 中测试您的 Stories。
loading
Yann Braga
加入社区
7,468开发者及更多
原因为什么选择 Storybook组件驱动的 UI
文档指南教程更新日志遥测
社区插件参与进来博客
展示探索项目组件词汇表
开源软件
Storybook - Storybook 中文

特别感谢 Netlify CircleCI