文件
Storybook 文件

視覺測試

視覺測試可捕捉 UI 外觀中的錯誤。它們的運作方式是擷取每個 story 的螢幕截圖,並將其與先前的版本進行比較,以識別視覺上的變化。這非常適合驗證 UI 的版面配置、色彩、尺寸、對比度以及任何其他視覺方面。

Storybook 原生支援跨瀏覽器視覺測試,使用 Chromatic,這是 Storybook 團隊建立的雲端服務。當您啟用視覺測試時,每個 story 都會自動轉換為測試。這讓您可以直接在 Storybook 中獲得關於 UI 錯誤的即時回饋。

安裝擴充功能

透過安裝 @chromatic-com/storybook,這是 Storybook 維護者提供的官方擴充功能,將視覺測試新增至您的專案

npx storybook@latest add @chromatic-com/storybook

需要 Storybook 7.6 或更高版本。請閱讀遷移指南以升級您的專案。

啟用視覺測試

當您啟動 Storybook 時,您會看到一個新的視覺測試擴充功能面板,您可以在其中執行測試和檢視結果。

Visual Tests addon enabled

若要啟用視覺測試,請註冊 Chromatic 並建立一個專案。這將讓您存取一系列雲端瀏覽器。

Visual Tests addon project selection

從您的專案列表中選擇一個專案以完成設定。如果您是第一次設定擴充功能,組態檔案和必要的專案識別符將會自動為您新增。

設定

此擴充功能預設包含涵蓋大多數使用案例的組態選項。您也可以微調擴充功能組態,以透過 ./chromatic.config.json 檔案來符合您專案的需求。以下是可用的選項以及如何使用它們的範例。

選項描述
projectId自動設定。設定專案識別符的值
"projectId": "Project:64cbcde96f99841e8b007d75"
buildScriptName選填。定義自訂 Storybook 建置腳本
"buildScriptName": "deploy-storybook"
debug選填。將詳細的偵錯資訊輸出到主控台。
"debug": true
zip選填。建議用於大型專案。設定擴充功能以將您的 Storybook 以 zip 檔案部署到 Chromatic。
"zip": true
./chromatic.config.json
{
  "buildScriptName": "deploy-storybook",
  "debug": true,
  "projectId": "Project:64cbcde96f99841e8b007d75",
  "zip": true
}

執行視覺測試

點擊 Storybook 側邊欄中的 ▶️ Play 按鈕來執行視覺測試。這會將您的 stories 發送到雲端以拍攝快照並偵測視覺變化。

Storybook running visual tests with the addon

檢閱變更

如果您的 stories 中有視覺變化,它們將在側邊欄中以 🟡 突出顯示。點擊 story 並前往視覺測試擴充功能面板,查看哪些像素發生了變化。

如果變更是有意的,✅ 在本地將它們接受為基準。如果變更不是有意的,請修復 story 並使用 ▶️ Play 按鈕重新執行測試。

Confirm UI changes in Storybook

當您完成在擴充功能中將變更接受為基準時,您就可以將程式碼推送到遠端儲存庫了。這會將基準同步到雲端,供任何簽出您分支的人使用。

Accept UI changes in Storybook

使用 CI 自動化

此擴充功能旨在與 CI 搭配使用。我們建議在開發期間使用擴充功能檢查變更,然後在您準備合併時在 CI 中執行視覺測試。

您在擴充功能中接受為基準的變更將在 CI 中自動接受為基準,因此您不必審查兩次。

  1. 在您的 CI 工作流程中新增一個步驟來執行 Chromatic。

  2. 設定您的 CI 以包含環境變數,以便使用 Chromatic 進行身份驗證 (專案令牌)。

PR 檢查

一旦您在 CI 中成功設定 Chromatic,您的提取/合併請求將會標記 UI 測試檢查。徽章會通知您測試錯誤或需要您的團隊驗證的 UI 變更。在您的 Git 供應商中將檢查設為必要,以防止意外的 UI 錯誤被合併。

PR badge for visual tests


視覺測試和快照測試之間有什麼區別?

快照測試 會將每個 story 的渲染標記與已知的基準進行比較。這表示測試比較的是 HTML blob,而不是使用者實際看到的內容。反過來說,這可能會導致誤判率增加,因為程式碼變更並不總是會導致組件的視覺變化。

視覺測試會將每個 story 的渲染像素與已知的基準進行比較。因為您測試的是使用者實際體驗到的相同內容,所以您的測試將會更豐富且更易於維護。

了解其他 UI 測試