先给出结论:不要试图用一份“通用组件验收单”覆盖所有页面,而要先确定这个组件在各页面承担的是展示职责还是交互职责。展示职责的差异通常来自上下文,交互职责的差异通常来自状态和依赖。按这两种条件分别构造样例,才能把“A页面正常、B页面异常”的分歧变成可核对的事实。下面说明两种条件各自成立时该怎么选、怎么做,以及哪些情况属于例外。
同一个按钮、卡片或表单控件,在列表页和详情页表现不同,很多时候不是组件本身坏了,而是它被放进不同的容器宽度、不同的父级样式或不同的内容长度里。这类差异的典型证据是:组件单独打开一个测试页时表现一致,一旦嵌入真实页面就出现换行、截断、间距异常或点击区域偏移。
此时验收样例的构造单位应该是“组件 + 宿主页面 + 数据形态”,而不是组件本身。具体动作可以这样落地:
做完这一步,下一步的判断会变得清晰:如果换成相同内容后差异消失,问题在内容适配策略;如果差异仍在,问题在页面级样式或布局约束。这个结论直接决定修复应该改组件内部还是改页面容器。
另一类差异与页面布局无关,而是组件在不同页面被赋予了不同的状态或依赖。例如同一个下拉选择组件,在结算页需要读取用户已保存的地址,在设置页需要读取默认偏好;同一张图片组件,在首页走懒加载,在文章页走即时加载。这类差异的证据是:组件在一种页面能交互,在另一种页面无响应、值不回填或初始状态错误。
这种条件下,验收样例应该按状态维度展开,而不是按页面数量展开。建议至少覆盖:初始态、加载中、有数据、空数据、错误态。每个状态都要写清“在哪个页面触发”和“期望看到什么”。
把状态矩阵写进验收样例后,团队对“表现不同”的讨论会从“我觉得这里不对”转为“这个状态在B页面没有被触发”。这是把分歧转成可核对项目的关键一步。
现实中更常见的是上下文和状态交织:组件在移动端列表页正常,在桌面端详情页异常,而这两个页面的数据来源也不同。这时不要一次性构造一个大而全的样例,而是先做分离验证。
可以先固定页面不变、只切换数据来源,观察差异是否变化;再固定数据来源、只切换页面容器,观察差异是否变化。两轮之后,通常能判断出主因落在哪一侧。这个动作的价值在于:它避免了“改了一处、另一处又坏”的反复,也让修复范围可以被明确写进验收项。
一个假设例子:假设某卡片组件在列表页显示正常,在详情页右侧栏出现文字溢出。先保持详情页容器不变,把列表页的内容数据替换进去,若溢出依旧,则主因在容器宽度;若溢出消失,则主因在内容长度策略。这个比较方法只用于说明判断路径,不代表任何真实项目结果。
有些“表现不同”并不属于组件问题,写进验收样例反而会制造噪音。例如:页面本身处于灰度发布状态、组件依赖的接口在某一环境返回不同结构、或页面使用了不同的埋点脚本导致渲染时机不同。这些属于环境或发布流程问题,应该单独记录并交给对应环节处理。
判断标准是:如果差异只在特定环境、特定账号或特定发布批次出现,而在相同页面、相同数据下无法稳定复现,就不应归入组件验收样例。此时正确的动作是记录复现条件,而不是修改组件。
把组件差异拆成“上下文条件”和“状态条件”两类之后,验收样例就不再是一份笼统的检查表,而是一组能指向具体修复位置的项目。团队对同一事实的理解分歧,也会随着样例可复现而逐步收敛。