先给结论:当同一组件在不同页面表现不一致时,验收样例不应只记录“哪个页面正常”,而应把页面当作变量,构造出能区分“组件自身缺陷”“页面上下文干扰”“数据差异”三类原因的对照样例。最有效的做法是固定组件版本与数据,只改变一个页面条件,观察差异是否复现;若差异随页面条件消失,则问题多半不在组件本身。下面给出可执行的分层构造方法,以及一个会让结论失效的反例。
同一组件在不同页面表现不同,最常见的原因是页面提供的上下文不同,而不是组件代码本身有问题。构造验收样例前,必须先固定以下三项,否则任何对照都不可信:
固定之后,页面本身成为唯一变量。此时可构造最小对照样例:把组件分别挂载到两个结构不同的页面壳中,一个页面壳带全局样式重置,另一个不带;一个带父级容器约束宽度,另一个不限宽。如果差异只在其中一种页面壳中出现,说明问题由页面上下文触发,验收样例应记录该上下文条件,而不是笼统写“某页面异常”。
“表现不同”是现象,不是证据。要区分原因,需要收集能互相排斥的观察项。可按下表思路逐项核对,但不必一次全做,优先做能最快排除一类原因的两三项:
一个实际动作是:在两类页面中分别打印同一元素的计算样式快照,并记录父级容器的布局属性。若快照显示只有宽度不同,而父级布局属性一致,则下一步应排查全局样式重置与选择器作用域;若父级布局属性不同,则下一步应把组件放入一个中立的隔离容器再复测。这个动作的结果会直接决定修复方向,避免在组件内部盲目改动。
假设某列表组件在首页、详情页、弹窗内表现不同:首页正常,详情页行高异常,弹窗内点击无响应。可构造三个验收样例:
若样例 B 恢复正常,说明差异来自详情页父级样式;若样例 C 点击恢复,说明差异来自事件冲突。若三个样例都复现原问题,才需要回到组件内部排查。这里所有数字与页面名称均为假设,仅用于说明对照方法,不代表任何真实项目结果。
上述方法成立的前提是输入数据一致。如果两类页面传入的数据在长度、类型或空值上本就不同,那么即使固定组件版本与页面壳,差异仍会复现,此时“页面上下文导致差异”的结论不成立。例如,首页传入十条短文本,详情页传入三条含长单词的文本,换行与溢出行为必然不同。这种情况下,应先统一数据再复测;若统一数据后差异消失,则验收样例应记录数据约束,而不是继续追查样式或事件。
因此,构造验收样例的最后一步是:把复现差异的最小数据与最小页面条件一起写进样例说明,并注明“在数据一致、仅页面条件不同时差异是否复现”。下一步动作是让开发或测试按该样例复测一次;若复测结果与记录一致,即可进入修复与回归;若不一致,则说明仍有未固定的变量,需要回到不变量清单继续排查。