文档
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可选。推荐用于大型项目。配置插件以将您的 Storybook 作为 zip 文件部署到 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 代码块,而不是用户实际看到的内容。反过来,这可能会导致误报的增加,因为代码更改并不总是会在组件中产生视觉变化。

视觉测试将每个 Story 的渲染像素与已知基线进行比较。因为您测试的是用户实际体验到的内容,所以您的测试将更丰富且更易于维护。

了解其他 UI 测试