先给出结论:不要为“组件本身”写一份通用验收样例,而要按“组件×页面上下文”构造一组对照样例。做法是固定组件版本与数据,只改变页面上下文中的一个变量,记录组件输出与页面最终呈现的差异,再把无法用同一预期判定的组合单独列为待查项。这样得到的不是一张通过/不通过清单,而是一张能定位遗漏条件的差异表。
同一组件在A页正常、在B页异常,通常混着三层原因。第一层是组件输入不同:两页传给组件的属性、数据字段或默认值不一样。第二层是页面上下文不同:外层容器宽度、主题样式、脚本加载顺序、同页其他组件占用资源的情况不一样。第三层是渲染时机不同:组件在首屏同步渲染,还是在异步数据返回后、在某个交互之后才渲染。验收样例要能区分这三层,否则你只会得到“B页有问题”这种无法执行的结论。
一个可操作的起点:拿出现有资料中出问题的那两个页面,分别记录组件接收到的输入快照、组件挂载位置的DOM结构、以及组件完成渲染的时间点。三项中哪一项在两页之间不一致,就先把它当作候选变量,而不是直接改组件代码。
假设同一张卡片组件在列表页显示正常,在详情页侧栏出现文字截断。不要立刻新建十个页面来试。先构造最小对照:
每一步只改一个变量,并记录该步之后组件输出与页面呈现是否一致。这样得到的样例是有向的:它能告诉你下一个要验证的变量是什么。反过来,如果一次同时改宽度、数据和加载顺序,即使问题消失,你也不知道是哪一项起了作用,验收结论无法复用。
验收样例如果没有写明预期,执行者只能凭感觉判断。预期应写成可观察的结果,例如:卡片标题在容器内不换行超过两行;图片区域高度与同页其他卡片一致;组件在数据返回后五百毫秒内完成可见渲染。避免写“显示正常”这类无法判定的描述。
对同一组件的不同页面,预期可以不同,但必须显式声明。例如列表页允许标题截断并显示省略号,详情页侧栏要求完整显示。两个预期都成立时,组件表现不同并不等于缺陷,而是上下文差异被正确响应。真正需要处理的是:在相同预期下,两页结果不一致;或者某页结果与声明的预期不符。
建议为每个样例保留三项记录:输入快照、上下文变量、观察结果。三项齐全的样例才能被他人复现。缺少输入快照的样例,过一段时间连构造者自己都无法重放。
执行对照样例时,常会出现一种情况:单变量测试都通过,但把多个变量组合回原页面后问题重现。这说明存在交互效应,例如宽度约束叠加异步渲染才触发。此时不要继续扩大样例数量,而应把该组合标记为“待归因”,单独记录触发条件和最小复现路径。
判断是否需要继续投入,可以看两个信号:一是该组合是否出现在真实访问路径上,二是它是否影响页面核心内容或主要操作。若两者都不满足,可以先记录而不阻塞整体验收;若满足其一,就应把它升级为必须解决的样例,并补充一个反向验证——移除其中一个变量后问题是否消失。移除后消失,说明该变量是必要条件;移除后仍存在,说明还有未识别的变量。
需要提醒的是,某个页面请求量低、某组件出现次数少,都不能单独证明该组合可以忽略。低请求量也可能只是入口未被发现,出现次数少也可能因为页面本身没被正常访问。这些现象需要结合访问路径和页面用途判断,而不是直接当作处理正确的依据。
把上述方法固化成动作顺序:先选一个真实出问题的页面和一个表现正常的页面作为对照对象;再列出输入、上下文、时机三类候选变量;然后按单变量法逐个构造样例并记录观察结果;接着为每个样例写明可观察预期;最后把无法归因的组合隔离并标注触发条件。执行完这一轮后,你得到的差异表可以直接指导下一步:是修组件默认值、调整页面容器约束,还是改变数据加载与渲染的先后关系。每一步动作的结果都会缩小下一个待验证变量的范围,而不是把问题留在“某页不正常”的模糊状态里。