先给结论:不要试图写一份覆盖所有页面的通用验收样例,而应该把组件拆成“结构输出”和“页面上下文”两层,分别设定可观察的验收点。同一组件在不同页面表现不同,通常不是组件本身坏了,而是它依赖的页面数据、位置或渲染条件不同。验收样例要围绕这些差异构造,而不是反复测试同一个标准页面。
假设一个情境:某站点的面包屑组件在文章详情页显示正常,在分类列表页却缺少中间层级,在产品页又多出一层筛选路径。开发者说组件代码没动过,运营说页面看起来就是不对。这时如果直接让开发“修组件”,很可能改完文章页又弄坏另外两类页面。
更有效的做法是先做归因。把每个页面的面包屑输出拆成三部分:数据来源、层级规则、渲染位置。如果三者的代码路径一致,只是输入数据不同,问题在页面上下文;如果代码路径本身按页面类型走了不同分支,问题在组件条件逻辑。归因结果直接决定验收样例怎么写:前者按数据场景构造,后者按分支条件构造。
可区分的证据包括:同一组件在A页面输出完整、在B页面缺项;缺项是否与该页面的数据字段为空同时出现;把A页面的数据手动喂给B页面的模板后,输出是否恢复正常。这三个观察足以把大部分“表现不同”分成数据缺失、条件分支和样式干扰三类。
实际工作中常见两种取舍:一种是“固定样例法”,选定一个代表性页面,把该页面的组件输出写成固定验收标准;另一种是“矩阵样例法”,按页面类型和关键数据状态组合出若干验收样例。两者都成立,但适用条件不同。
选择依据不是“哪个更专业”,而是组件被复用的页面数量和字段差异程度。如果同一组件出现在三种以上页面类型,且至少一种页面存在可选字段或空值,矩阵样例法更稳妥。如果只有两个结构几乎相同的页面,固定样例法加一条空值检查就够了。
矩阵样例的关键是选变量,不是把站点所有URL列一遍。对组件表现影响最大的变量通常有三类:页面类型、组件所在区域、以及组件依赖的数据是否完整。
这样构造出的验收样例数量可控,且每个样例都对应一个明确的差异来源。验收时如果某个样例失败,能直接定位到是页面类型问题、位置问题还是数据问题,而不是笼统地记一条“组件异常”。
假设验收中发现:分类列表页的面包屑缺少中间层级,而详情页正常。按上面的矩阵,这个样例对应的变量是“页面类型 + 中间层级字段”。下一步动作不是改组件样式,而是检查分类页是否真的提供了中间层级数据。如果数据存在但未传入组件,修的是页面模板的数据传递;如果数据本身不存在,就要决定是补数据、还是在组件里对该页面类型降级显示。
这个判断会直接改变后续验收范围:修数据传递,需要回归所有使用同一模板的页面;改降级逻辑,需要为其他可能缺数据的页面补样例。也就是说,一次失败样例的处理方式,决定了验收矩阵要不要扩展。这正是矩阵样例比固定样例更费维护、但在多页面复用场景下更可靠的原因。
最终交付的验收样例不需要很长,但每条要包含四要素:页面类型、数据前提、组件位置、预期输出。例如“分类列表页,中间层级字段为空,主内容区顶部,面包屑只显示首页和当前分类,不显示占位符或空链接”。这样的描述让开发、运营和验收方对“表现正常”有同一套判断标准。
同时要接受一个现实:验收样例覆盖的是已知差异,不能保证覆盖所有未来页面。因此每次新增页面类型或新增可空字段时,都应回头检查矩阵是否需要补样例。组件表现不同本身不是缺陷,缺陷是差异没有被识别、没有被归因、也没有被写进验收条件。把这三件事分开处理,比反复争论“组件到底有没有问题”更能推动上线决策。