文件
Storybook 文件

視覺測試

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

Storybook 原生支援使用 Chromatic 進行跨瀏覽器視覺測試,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選用。建議用於大型專案。將擴充功能設定為以 zip 檔案的形式將您的 Storybook 部署到 Chromatic。
"zip": true
// ./chromatic.config.json
{
  "buildScriptName": "deploy-storybook",
  "debug": true,
  "projectId": "Project:64cbcde96f99841e8b007d75",
  "zip": true
}

執行視覺測試

按一下 Storybook 側邊欄中的 ▶️「播放」按鈕以執行視覺測試。這會將您的 Stories 送至雲端以擷取快照並偵測視覺上的變化。

Storybook running visual tests with the addon

檢閱變更

如果您的 stories 中有視覺上的變更,它們將會在側邊欄中以 🟡 突出顯示。點擊該 story 並前往「視覺測試」附加元件面板,查看哪些像素已變更。

如果這些變更是有意的,請在本地 ✅ 接受它們作為基準。如果這些變更不是有意的,請修復該 story 並使用 ▶️ 「播放」按鈕重新執行測試。

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 測試