组件库提速:Storybook + Chromatic + Visual Test 实战

组件库开发如果没有文档、测试、变更对比,很容易出事故。Storybook + Chromatic(或 Percy)+ 可视化回归测试,可以让组件开发、UI 审核、测试、发布形成闭环。今天我们搭建一条"组件库流水线":开发在 Storybook,自动生成文档,PR 自动跑视觉回归,产出 Demo 链接给设计/产品审核,效率直接提升。

🎯 目标

  • 组件开发全在 Storybook Story 中完成。
  • 自动部署到 Chromatic,生成在线文档和对比截图。
  • PR 中自动执行视觉回归,避免 UI 意外变化。

🧱 Storybook 初始化

bash 复制代码
npx storybook@latest init --builder @storybook/builder-vite

生成目录:

复制代码
.storybook/
stories/

.storybook/main.ts

ts 复制代码
export default {
  stories: ['../src/**/*.stories.@(ts|tsx|mdx)'],
  addons: [
    '@storybook/addon-essentials',
    '@storybook/addon-interactions',
  ],
  framework: {
    name: '@storybook/react-vite',
    options: {},
  },
};

🧩 编写 Story

tsx 复制代码
import type { Meta, StoryObj } from '@storybook/react';
import { Button } from './Button';

type Story = StoryObj<typeof Button>;

const meta: Meta<typeof Button> = {
  title: 'Atoms/Button',
  component: Button,
  argTypes: {
    variant: { control: 'select', options: ['primary', 'secondary'] },
  },
};
export default meta;

export const Primary: Story = {
  args: {
    children: '点击我',
    variant: 'primary',
  },
};
  • Story 即文档 + Demo + 用例。

🚀 Chromatic 集成

bash 复制代码
pnpm install -D chromatic

package.json

json 复制代码
{
  "scripts": {
    "storybook": "storybook dev -p 6006",
    "build-storybook": "storybook build",
    "chromatic": "chromatic --project-token=$CHROMATIC_TOKEN"
  }
}
  • 在 CI 中执行 pnpm chromatic,自动上传 Storybook。
  • PR 中生成预览链接 + 视觉对比。

🧪 可视化回归

  • Chromatic 自动对比当前 Story 与上一次基准图。
  • 设计/开发在浏览器中审核变化,批准或拒绝。
  • 无额外脚本,自带 UI。

⚙️ 与测试结合

  • 使用 @storybook/testing-react 把 Story 作为测试用例:

    ts 复制代码
    import { render } from '@testing-library/react';
    import { composeStory } from '@storybook/testing-react';
    import Meta, { Primary } from './Button.stories';
    
    const PrimaryStory = composeStory(Primary, Meta);
    
    test('按钮点击', () => {
      const { getByText } = render(<PrimaryStory />);
      expect(getByText('点击我')).toBeInTheDocument();
    });
  • Story 一处编写,多处复用。

🧯 常见坑

问题 现象 解决
Storybook 构建慢 组件多 使用 Vite Builder、按需加载
Chromatic 限制 免费版并发低 提前排队、升级套餐或使用 Percy
Story 未及时更新 同步困难 把 Story 写成组件开发必经步骤,PR 模板提醒
可视化误报 动态数据导致波动 使用固定数据、Mock Date/Math.random

🏁 小练习

  1. 给团队的组件库接入 Storybook 和 Chromatic,体验审批流程。
  2. 使用 Story 生成自动化测试,提高覆盖率。
相关推荐
牛奶20 分钟前
Vue 基础理论 & API 使用
前端·vue.js·面试
牛奶26 分钟前
Vue 底层原理 & 新特性
前端·vue.js·面试
anOnion44 分钟前
构建无障碍组件之Radio group pattern
前端·html·交互设计
pe7er1 小时前
状态提升:前端开发中的状态管理的设计思想
前端·vue.js·react.js
SoaringHeart2 小时前
Flutter调试组件:打印任意组件尺寸位置信息 NRenderBox
前端·flutter
晚风予星2 小时前
Ant Design Token Lens 迎来了全面升级!支持在 .tsx 或 .ts 文件中直接使用 Design Token
前端·react.js·visual studio code
sunny_3 小时前
⚡️ vite-plugin-oxc:从 Babel 到 Oxc,我为 Vite 写了一个高性能编译插件
前端·webpack·架构
GIS之路3 小时前
ArcPy 开发环境搭建
前端
林小帅4 小时前
【笔记】OpenClaw 架构浅析
前端·agent
林小帅5 小时前
【笔记】OpenClaw 生态系统的多语言实现对比分析
前端·agent