先把结论说清楚:当同一个组件在A页面正常、在B页面异常,验收样例不能只写“组件显示正常”,而要固定三样东西——组件挂载位置的父容器约束、页面级样式或脚本的作用范围、以及组件接收的数据形态。缺少完整数据或权限时,最小可执行动作是构造两组对照样例:一组复现异常页面的环境,一组保留正常页面的环境,只改其中一个变量。能得到的结论是“差异由哪个变量触发”,不能得到的是“组件本身有缺陷”或“某浏览器一定不支持”。
同一组件跨页面表现不一致,最常见的原因可以归为两类。第一类是环境差异:父容器的宽度、高度、定位方式、层叠上下文不同,或者页面引入了全局样式、重置规则、第三方脚本,间接改变了组件的渲染条件。第二类是数据差异:组件在两个页面拿到的字段数量、字段类型、空值比例、嵌套深度不同,导致分支逻辑走了不同路径。
这两类解释的区分点在于:环境差异通常表现为布局、间距、层级、溢出、字体继承的偏移;数据差异通常表现为内容缺失、列表项数量异常、条件渲染块不出现、格式化结果不同。如果只看到“B页面错位”,不能直接判定是样式冲突,也可能是数据为空导致组件高度塌陷,进而触发父容器的对齐规则。
验收样例的价值在于可重复。建议每个样例至少记录以下字段,而不是只写预期结果:
如果缺少完整数据或权限,无法还原真实页面,就把“输入数据快照”降级为最小字段集:只保留能触发组件分支的字段,其余用占位值。这样做的结果是,你能判断异常是否与数据形态有关,但不能据此推断生产环境的全部数据都会同样表现。
假设有一个卡片组件,在列表页显示正常,在详情页右侧栏出现文字截断。可以构造如下对照,数字仅为说明比较方法:
执行完这三组后,下一步动作取决于结果:如果指向环境差异,就继续缩小到具体样式规则或脚本,检查父容器宽度和层叠上下文;如果指向数据差异,就把字段快照补全,检查条件渲染和空值处理。这里的关键是,每次只改一个变量,否则无法归因。
有几类现象容易被误读。组件在某个页面不显示,不等于组件被禁用;也可能是父容器高度为0、被其他元素遮挡、或数据为空导致渲染分支未进入。控制台没有报错,不等于逻辑正确;样式偏移和布局塌陷通常不产生脚本错误。某个页面请求量或抓取量下降,也不能单独证明是组件改动导致,还可能是入口调整、内容更新节奏变化或统计口径变化。
因此,验收样例里要写清“观察到什么”和“因此推断什么”之间的边界。例如:观察到详情页卡片高度比列表页少20像素,可以推断该页面下组件可用高度受限,但不能推断组件在所有窄容器中都会截断,除非再用另一组不同宽度的样例验证。
最终交付的验收样例,应当让没有参与开发的人也能执行。可以按“前提—操作—观察—判定”四段写,每段只描述一个变量。判定条件要写成可观察的句子,例如“卡片内标题在容器宽度小于其最小内容宽度时出现省略号,且不遮挡相邻元素”,而不是“显示正常”。
如果权限只允许在本地或测试环境执行,就明确标注样例的适用范围:能验证组件在给定父容器和数据下的表现,不能验证生产环境所有页面组合。这样既保留了可执行的最小动作,也避免了把局部结论扩大成全局判断。验收样例的作用不是证明组件绝对没问题,而是让下一次出现同类差异时,能快速定位是环境变了还是数据变了。