返回部落格

Storybook 8.1

更有效率、更有條理且更可預測的 Storybook

loading
Michael Shilman
@mshilman
上次更新

Storybook 是業界標準的工作坊,用於建構、測試和記錄 UI 組件。每天有數千名開發人員使用它,包括 BBC、Etsy 和 Dropbox 的團隊。

在過去一年中,我們專注於生活品質維護工作。這最終在三月份推出了 Storybook 8.0,這是我們效能最高且最穩定的版本。

現在在 8.x 版本中,我們再次致力於改善您的 UI 開發體驗。為了開始這個目標,我很高興宣布推出更有效率、更有條理且更可預測的 Storybook 8.1

  • 🤖 故事自動生成和從控制項儲存
  • 🥸 類型安全、基於標準的模組模擬
  • ⚛️ 單元測試 React 伺服器組件
  • 🧳 Playwright 組件測試的可攜式故事
  • 💯 數百項更多改進

用於建立和編輯故事的新 UI

Storybook 的基本單位是故事,這是一小段 JavaScript 程式碼,用於捕捉組件範例。我們努力使故事易於閱讀和編寫,但在 8.1 版本中,我們更進一步:您現在可以從 Storybook 的 UI 建立和編輯故事,而 React 專案可以為新組件新增故事。若要瞭解更多資訊,請閱讀完整公告或查看官方文件

0:00
/0:19

為 Avatar 組件建立新的生成故事檔案

類型安全模組模擬

組件可能依賴各種輸入和上下文,例如需要在上下文中呈現,或從網路請求接收資料。在開發和測試時,您經常需要模擬這些依賴項。

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 伺服器組件

與端對端測試 (E2E) 不同,單元測試速度更快、更不易出錯,並且讓您可以分解 UI 及其測試,以便更輕鬆地驗證關鍵狀態。Storybook 的新模組模擬使我們能夠單元測試 React 伺服器組件 (RSC),方法是模擬它們所依賴的伺服器模組。對於 React 而言,這是一項重大進展,因為到目前為止,React 一直缺乏 RSC 的單元測試策略。

由於 RSC 目前主要在 Next.js 專案中使用,因此這項工作的大部分涉及建立許多 Next.js 模組的模擬版本。這些模擬會自動被監視並新增關鍵功能(例如能夠設定 Cookie 值),您可以直接在故事中使用這些功能。若要瞭解更多資訊,請查看我們的範例儲存庫並期待完整的公告。

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 頁面組件的故事檔案,使用模擬的 cookies 公用程式設定 Cookie 值。
知道什麼比 UI 組件的單元測試更好嗎?視覺化測試!我們剛剛推出了視覺化測試擴充套件,以自動跨多個瀏覽器和視窗測試故事,而無需離開 Storybook。更快地開發並更有信心。

Playwright 組件測試的可攜式故事

在 Storybook 中開發的最大好處之一是您可以免費獲得測試。每個隔離的組件範例(或「故事」)都是一個 UI 測試。如果您想測試資料擷取和使用者互動,Storybook 也提供了相關工具。

現在,首次可以輕鬆地在 Playwright 的實驗性組件測試中重複使用這些故事。此工作流程將 Storybook 的組件開發和文件與 Playwright 強大的測試功能結合在一起。若要瞭解更多資訊,請閱讀完整公告參閱官方文件

0:00
/0:26

使用 Playwright 的 VS Code 擴充功能錄製基於故事的測試

數百項更多改進

除了上述功能外,每個 Storybook 版本都包含數百項各個層面的改進和錯誤修正。以下是一些重點

立即試用

Storybook 8.1 今天已發布。在新專案中試用

npx storybook@latest init

或升級現有專案

npx storybook@latest upgrade

如果您要從 7.x 升級,我們有指南可協助您。我們也有從舊版本遷移的指南

下一步是什麼

我們專注於 8.2 的兩個主要專案

  1. 減少 Storybook 安裝佔用空間和版本衝突
  2. 新增故事生命週期 Hook 以與其他測試工具對等

如需我們正在進行和考慮的工作的最新資訊,請查看Storybook 的新路線圖

致謝

非常感謝 58 位貢獻者,他們在 Storybook 8.1 中提交了 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 電子郵件列表

取得最新消息、更新和版本

6,730位開發人員且持續增加中

我們正在招聘!

加入 Storybook 和 Chromatic 背後的團隊。建構供數十萬名開發人員在生產環境中使用的工具。優先考慮遠端工作。

查看職位

熱門文章

Storybook 中類型安全的模組模擬

一種新的、基於標準的模擬方法
loading
Jeppe Reinhold

互動式故事生成

在幾秒鐘內建立您的第一個故事,無需離開瀏覽器!
loading
Valentin Palkovic

Playwright 組件測試的可攜式故事

以最少的設定在 Playwright CT 中測試您的故事。
loading
Yann Braga
加入社群
6,730位開發人員且持續增加中
為何為何選擇 Storybook組件驅動的 UI
文件指南教學課程變更日誌遙測
社群擴充套件參與貢獻部落格
展示探索專案組件詞彙表
開放原始碼軟體
Storybook - Storybook 繁體中文

特別感謝 Netlify CircleCI