先给结论:不要把“组件本身”当作验收对象,而要把“组件+页面上下文+数据条件”当作一个验收单元。同一组件在A页面正常、B页面异常,最常见的原因是上下文差异(父容器、样式作用域、数据形态、加载顺序),而不是组件代码有随机缺陷。验收样例的构造目标,是让每一条样例都能排除一种上下文解释,而不是反复重测同一个页面。
假设一个产品卡片组件在列表页显示正常,在详情页相关推荐区出现图片错位、按钮点击无响应。此时至少有两个成立条件不同的解释:
这两个解释的修复动作完全不同:前者要收敛样式作用域或容器约束,后者要补数据契约和空值分支。如果验收样例只写“产品卡片显示正常”,两种原因都测不出来。
要区分上面两种情况,需要构造能单独改变一个变量的样例。可核对的证据包括:
overflow、z-index 在两页不同,优先怀疑层叠与裁剪;如果这些相同但DOM结构不同,优先怀疑数据分支。这里要说明一个容易误判的现象:某页面组件请求量或渲染次数归零,不能单独证明该页面被正确排除。它也可能是懒加载未触发、条件渲染未命中、或该区域本就不在首屏。归零只是线索,需要配合上面的控制变量样例才能定性。
面向已有经验的读者,验收样例不应停留在“显示正常”。建议每条样例都包含三部分:
一个注明假设的短例子:假设列表页容器宽 320px、详情页推荐区容器宽 240px,同一卡片组件在 240px 下按钮换行导致点击区域被遮挡。验收样例可写成“在 240px 容器、传入完整字段时,主按钮保持单行且可点击”。执行这条样例后,如果按钮仍换行,下一步不是改组件,而是先确认是容器约束不足还是按钮最小宽度设定问题——这个判断会决定修复落在页面样式还是组件内部。
同一组件出现在多个页面时,逐页验收容易漏掉组合。更有效的做法是列出影响表现的上下文维度,再交叉取样:
不必穷举所有组合。选能区分解释的最小组合即可,例如“窄容器+缺图”“宽容器+超长标题”“懒加载+异步替换”。每条组合对应一条验收样例,并在样例里写明它要排除哪种解释。这样当某条失败时,你能直接知道下一步该查样式作用域还是数据契约,而不是回到“再点一遍看看”。
组件在某个页面修好后,其他页面可能因为共用样式或共用数据转换逻辑而受影响。建议在验收记录中保留两条回归条件:一是该组件被复用的页面清单,二是每个页面传入数据的字段契约。当字段契约变化(例如后端精简了返回字段)或全局样式调整时,重新执行对应上下文矩阵中的样例。动作与结果的对应关系是:字段契约变化 → 重跑缺字段样例 → 若失败则先修数据兜底,而不是先改容器宽度。把这条链路写进验收样例,才能让“同一组件不同表现”从偶发问题变成可复现、可定位的常规检查。