先给结论:不要为组件单独写一份“组件验收单”,而要按它出现的页面角色分别取样。同一张卡片放在栏目列表页、详情页侧栏和专题聚合页时,输入数据、父容器宽度、渲染顺序都不同,验收样例必须覆盖这些差异,否则你验的是组件本身,不是它在真实页面里的表现。
遇到同一组件表现不一致,第一步不是改代码,而是把差异归因。可区分的原因主要有两类:一类是输入数据不同,比如列表页传入的是摘要加缩略图,详情页侧栏传入的是标题加日期;另一类是容器环境不同,比如父级用了不同的栅格列数、内边距或懒加载策略。
判断方法很直接:固定数据、只换页面位置,看差异是否复现;再固定页面位置、只换数据,看差异是否复现。如果换位置就变,问题在容器或样式作用域;如果换数据才变,问题在字段映射、截断规则或空值处理。
这一步的产出不是结论,而是一张归因表。它决定后面验收样例怎么构造:容器型差异要按页面位置取样,数据型差异要按字段组合取样。两者混在一起测,会得到互相矛盾的结论。
当这个组件在页面上承担主要转化任务,比如列表页的入口卡片、聚合页的推荐位,验收样例就不能只取一条正常数据。建议按下面三类构造:
实施动作可以这样落地:在验收环境里为同一个组件建一组固定样例数据,把它分别投放到列表页、聚合页和详情页侧栏,逐一截图比对。比对结果直接决定下一步——如果只有侧栏错位,就优先查侧栏模板的容器约束,而不是回头改组件样式。
如果组件在页面上只做辅助展示,比如相关阅读、面包屑、页脚导航,验收成本可以压缩。这时不必为每个页面单独造一套数据,可以用一组通用样例覆盖多个页面,但要保留两条边界。
第一条边界是极端长度。辅助组件同样会遇到超长标题或超多条目,合并样例里必须包含一条超长数据,否则上线后仍可能在某个页面撑破布局。
第二条边界是渲染时机。辅助组件常被延迟渲染或异步插入,在不同页面上的插入位置不同。验收时要确认它在内容加载前后是否发生跳动,而不是只看最终静态截图。
合并样例的代价是覆盖度下降,所以它只适用于组件在页面中不承担关键交互、不靠近主要转化路径的情况。一旦它出现在首屏或影响点击行为,就回到条件一的做法。
假设某站点的“文章卡片”组件同时用于栏目列表页和详情页侧栏。列表页传入摘要字段,侧栏不传。验收时若只用列表页数据测试,侧栏的空摘要状态就不会被覆盖,上线后侧栏可能出现高度塌陷。
正确的做法是为该组件准备两份样例:一份含摘要,一份摘要为空,分别投放到两个页面位置。如果空摘要样例在侧栏塌陷而在列表页正常,说明差异来自侧栏模板对空值的处理规则,而不是组件本身。下一步应修改侧栏模板的空值分支,再重新跑这两份样例。
无论采用哪种条件,验收样例都必须记录三样东西:输入数据、投放位置、观察到的差异。只写“卡片显示异常”无法复现,也无法判断是数据问题还是容器问题。
建议把每条样例写成一行:样例编号 | 数据特征 | 页面位置 | 观察结果 | 归因。这样当后续有人改动模板或样式时,可以直接重跑同一组样例,确认原有差异是否被修复、是否引入新差异。验收样例的价值不在于一次通过,而在于它能在组件被复用到新页面时继续使用。