先给有条件的结论:当同一组件在列表页、详情页或首页出现差异时,验收样例应当围绕“组件自身状态、宿主页面上下文、数据输入”三个变量分别构造,而不是只截一张正常页面的图。这样做的前提是你能拿到组件源码或至少能修改传入参数;如果完全没有代码和权限,只能构造只读观察样例,结论也要相应缩小。
同一个组件表现不同,常见原因有三类,验收时要先区分,否则样例会互相污染。
判断依据可以这样取:把组件原样复制到一个最小空白页面,只保留必要容器和一份固定数据。如果此时表现和某个页面一致,说明差异多半来自宿主上下文或数据;如果连空白页也出现同样问题,则更可能是组件自身逻辑。这个最小页面就是后续所有验收样例的基线。
基线确定后,样例不必覆盖所有页面,而是覆盖变量的组合边界。可以按下面的顺序搭:
每个样例只改一个变量,并写明假设。例如假设“详情页差异来自容器宽度”,那么样例就是同一数据放进与详情页等宽的容器,看是否复现。复现则假设成立,不成立就转向数据或初始化时机。这样每一步的结论都能决定下一步查哪里。
如果拿不到后端数据、也没有改代码权限,仍可执行一个最小动作:用浏览器开发者工具在目标页面临时修改容器宽度或替换文本内容,观察组件是否随之变化。这个动作能区分“样式上下文问题”和“数据问题”,但不能据此断定组件源码有缺陷,也不能推出线上所有同类页面都会复现——你改的是当前渲染结果,不是构建产物。
另一个可执行动作是记录两个页面的实际渲染尺寸和计算样式,对比差异项。若差异只出现在宽度、行高或层级上,优先按上下文问题构造样例;若计算样式一致而内容不同,则转向数据输入。这个动作的结果直接决定你下一步是找样式负责人还是找数据接口负责人。
假设你在空白页复现了详情页的异常,于是判断“组件在窄容器下必然出错”。但如果详情页的异常其实来自该页面独有的异步数据到达顺序——组件先以空数据渲染一次,再被填充——那么空白页的复现只是巧合,换一个同步填充数据的窄容器页面就不会出错。此时原结论失效。要排除这种情况,需要在样例中同时控制数据到达时机,而不只是控制容器宽度。
每个样例建议包含四行:前提假设、唯一变量、观察到的现象、由此排除或保留的可能。验收时不是看“页面好不好看”,而是看每个样例能否独立复现或推翻一个假设。如果某个样例在两次执行中结果不一致,先怀疑数据到达时机或缓存,而不是直接判定组件不稳定。
最后一步动作:挑出差异最明显的两个页面,各构造一组只改一个变量的样例,跑完后把结论合并。合并后仍无法解释的差异,才需要申请更高权限或补充数据,这时你的请求会带着明确的变量范围,而不是笼统地说“组件有问题”。