先给结论:不要试图用一个“万能样例”覆盖所有页面,而要把组件拆成“固定输入 + 页面上下文”两层,分别记录它在哪些条件下成立、在哪些条件下失效。验收样例的正确形态不是一张检查表,而是一组带前提的最小复现页面。下面按保留、改写、退出三种取舍说明各自适用条件。
同一个组件在A页面正常、在B页面错位,常见原因有三类:一是父容器的宽度、内边距或定位方式不同;二是页面加载了不同的全局样式或脚本;三是数据本身不同,比如标题长度、图片比例、条目数量。这三类原因对应完全不同的验收样例,不能混在一起测。
可区分的证据是:把A页面的组件整块复制到一个空白模板里,如果表现正常,说明组件本身没问题,差异来自上下文;如果复制后依然异常,说明组件内部逻辑或样式有缺陷。这个动作只需几分钟,却能决定后续是改组件还是改页面。
如果组件在窄栏和宽栏下呈现不同布局是设计意图,那么验收样例不应追求“完全一致”,而应记录每个布局的触发条件。例如侧栏宽度小于某个值时切换为纵向排列,这属于合理适配,保留即可。
此时样例要写清三件事:触发条件、预期表现、不可接受的退化。触发条件可以用容器宽度、条目数量或字段长度描述;预期表现要写成可观察的结果,而不是“看起来正常”;不可接受的退化要具体,比如文字被截断、按钮不可点击、图片拉伸变形。
适用前提:差异是设计上主动选择的,且每种表现都经过确认。如果只是“某页面碰巧没坏”,那不叫适配,叫偶然,不能按保留处理。
更常见的情况是:组件本身没问题,但每个页面各自写了一套边距或对齐规则,导致同一组件在不同页面表现不一致。这时正确的动作不是给每个页面单独写验收样例,而是把重复出现的上下文规则抽成一层统一的容器约定。
具体做法是:先列出组件出现过的所有页面,记录每个页面的容器宽度、内边距、对齐方式;找出其中重复出现的组合,把它固化为两到三种标准容器;剩余的特殊页面单独标注为例外。改写完成后,验收样例的数量会从“页面数”降到“容器类型数”。
适用前提:差异主要来自外层容器而非组件内部,且页面数量还会继续增加。如果只有两三个页面且不再新增,直接逐个记录反而更省事。
如果同一组件在多个页面反复出现难以解释的差异,且每次修复都会在别处引入新问题,这通常说明组件承担的职责过多,或依赖了不稳定的全局样式。此时继续为它补验收样例,成本会持续上升。
退出的判断依据不是“修了几次”,而是修复是否收敛:如果最近几次修改都在不同页面引发新的例外,说明问题不在单个页面,而在组件边界。退出方式可以是把它降级为仅在一个页面使用,或替换为更简单的静态结构,而不是继续推广到新页面。
适用前提:该组件并非核心功能,替换成本低于持续维护成本。如果它是下单、提交等关键路径,应先隔离问题再决定,不宜直接移除。
无论最终选择保留、改写还是退出,样例本身都应包含以下要素,缺一项就会在规模化后重新出现例外:
假设某企业站有五种页面模板,同一张卡片组件在三种模板里正常、两种里错位。按上面的方法,先判断错位是否来自容器宽度;若是,就把两种异常模板归入同一容器类型并改写规则,验收样例从五个减到三个;若错位原因无法归并,则把该组件限制在正常的那三种模板中使用。这个例子只用于说明判断顺序,实际数量以你手上的页面为准。
把样例写成“带前提的最小复现页面”,而不是“看起来对不对”的描述,才能在页面继续增加时保持验收结果稳定;否则每加一个新页面,就要重新争论一次组件到底算不算合格。