先给结论:不要为每个页面各写一份验收单,而要把这个组件抽成一份带“页面上下文”的验收样例,固定组件自身的预期,再逐页记录影响它的外部条件。做法是先确认组件版本一致,再对比页面级差异,最后用一组能区分原因的最小样例验证。如果组件在A页正常、B页异常,而两页引用的是同一份代码,问题通常不在组件本身,而在它继承的上下文。
很多反常现象来自比较对象不成立。策划阶段写“同一组件”时,指的是同一个源码文件或同一段模板,但落到页面上可能已经变成三种东西:不同版本的缓存产物、被页面样式覆盖后的变体、由不同数据填充后的形态。验收前必须先用可核对的证据确认比较前提。
假设一个站点的卡片组件在列表页显示正常,在详情页侧栏出现高度塌陷。若两页加载的是同一构建产物,那么“组件坏了”这个解释就不成立,应该转向上下文差异。这一步的意义在于:如果版本或数据不同,后续所有对比都是无效的,必须先统一前提再继续。
当版本和数据确认一致后,剩下的矛盾通常落在两类原因上。
组件依赖父容器宽度、外部字体或全局变量来决定自身尺寸与换行。在宽栏页面里表现正常,进入窄栏或侧栏后触发溢出、截断或错位。这类问题的证据是:把组件放进一个与目标页面容器宽度、内边距相同的空白容器,异常可以复现;改变父容器宽度,组件外观随之变化。
组件本身有明确边界,但某个页面的样式、脚本或布局规则覆盖了它。证据是:在空白容器中组件表现正常,只有放进特定页面才异常;在开发者工具中能定位到命中该组件的页面级选择器,或能看到脚本在挂载后修改了属性与类名。
这两类原因的处理方式完全不同。前者要改组件,让它不依赖外部假设;后者要收敛页面级覆盖,或明确声明该页面允许的变体。用错方向会导致改了组件却仍在别的页面复发,或反复压制页面样式而组件依旧脆弱。
验收样例的目标不是穷举页面,而是用最少的对照把原因逼出来。可以按下面的顺序构造,每一步都记录结果,并据此决定下一步。
每个样例都要写清三件事:组件版本、容器条件、输入数据。缺少任何一项,复现结果都无法被他人核对。验收单上不要写“详情页卡片异常”这种描述,而要写成“组件v某构建、容器宽320px、标题60字无空格,出现横向溢出”。
当样例跑完,判断规则可以很简单:基准正常、容器变量异常,改组件边界;基准正常、容器变量正常、页面注入异常,收敛页面覆盖;基准就异常,先修组件自身。若多个样例都异常,说明组件同时存在边界问题与数据假设问题,应分开处理,不要合并成一次修改。
这里有一个容易误判的点:某个页面异常消失,不等于问题已解决。缓存刷新、数据恰好变短、页面改版都可能让现象暂时不见。请求量或报错量归零也不能单独证明处理正确,还要看是否在相同容器与数据条件下重新验证过。验收样例的价值就在于把“看起来好了”变成“在指定条件下可重复”。
把这份样例并入网站制作策划的交付物时,建议按组件而不是按页面归档,并在每个组件下附上它被允许出现的页面上下文清单。这样后续新增页面时,可以直接判断该页面是否落在已验证的上下文范围内;超出范围就需要补一条样例,而不是等到上线后才发现表现不一致。验收样例不是一次性检查表,而是随组件与页面结构变化持续维护的对照记录,它决定了下一次改动应该先动组件还是先动页面。