先给结论:不要试图找到一个“全局正确”的组件表现,而要把差异本身变成验收对象。做法是固定组件输入,分别记录它在两类页面条件下的输出,再决定是修组件、改页面调用方式,还是只对其中一类页面设例外。若只在一个页面复测通过就宣布修复,后续换页仍会复发。
同一组件表现不同,通常落在两类原因里,验收样例也要按这两类分别构造。
内容驱动差异指组件代码没变,只是传入的数据不同。比如产品列表组件在“有长标题、有配图”的分类页正常,在“标题短、无配图”的专题页塌陷。此时要构造的样例是同一组件配不同长度、不同字段完整度的数据,而不是去改组件样式。
容器驱动差异指数据相同,但组件被放进不同宽度的栏、不同背景、不同父级布局里。比如同一张卡片在通栏区域正常,在侧栏里溢出。此时要构造的样例是同一份数据放进不同容器宽度,观察溢出、换行和点击区域。
区分依据很简单:把同一份数据分别喂给两个页面位置。若结果跟着数据走,是内容驱动;若跟着位置走,是容器驱动。这一步决定后面修哪里,方向错了会在错误文件里反复改。
验收样例不是“再打开一个页面看看”,而是一组可重复、可对照的输入输出记录。
实施动作的直接影响是:当你能用同一组数据在两个位置复现差异时,就能判断该改组件默认值还是改调用处的容器约束。若差异只在某一组数据下出现,优先怀疑内容驱动;若两组数据都出现且随位置变化,优先怀疑容器驱动。
条件一:差异只出现在个别页面,且这些页面的数据明显特殊。这时优先改页面调用方式,而不是动组件本身。因为组件被多数页面正常使用,改默认值可能把正常页面改坏。动作是给该页面传入补充字段或加一层容器约束,然后回到验收样例复测两组数据。结果是:如果特殊页面恢复正常且其他页面无变化,说明问题在调用层,验收通过;如果特殊页面正常但另一页面开始异常,说明组件默认值本身不够健壮,需要回到组件层。
条件二:差异在多个页面随机出现,且与数据完整度无关。这时优先改组件,把它的尺寸和换行行为设成不依赖父级假设。动作是让组件在最小宽度和最大宽度下都能自洽,再逐页复测。结果是:如果所有页面表现一致,说明原先的差异来自组件对外部容器的隐式依赖;如果仍有页面不同,说明还有未识别的容器条件,需要继续补充对照样例。
假设某站点有一个文章卡片组件,在列表页显示正常,在详情页侧栏出现文字溢出。按上面的方法,先固定两组数据:一组是短标题加配图,一组是长标题无配图。分别放进列表页容器和侧栏容器,记录四项观察:是否横向溢出、标题是否换行、图片是否被压缩、整卡是否可点击。
若结果显示:短标题在侧栏也溢出,说明与标题长度无关,是容器宽度问题,应改侧栏约束或让卡片自适应;若只有长标题在侧栏溢出,说明是内容驱动叠加窄容器,应同时处理标题换行规则和容器下限。这个例子的数字只是用于说明对照方法,不代表任何真实项目结果。
有些差异属于合理例外,不必强行统一。例如同一组件在营销落地页故意放大、在后台管理页故意紧凑,这是设计意图,不是缺陷。判断标准是:差异是否有明确目的,且是否在两类页面都稳定复现。若稳定且符合意图,把它写进验收说明,而不是当成 bug 修掉。
还要注意,某个页面复测通过、某个统计归零,都不能单独证明处理正确。页面通过可能只是这次数据恰好没触发边界;数据变化也可能来自缓存、发布延迟或访问来源变化,而不是修复本身。合理做法是保留两组固定数据和对照记录,过一段时间用同样输入再验一次,确认差异是否真的消失。这样验收样例才不是一次性的检查,而是能持续回答“同一组件为什么在这里不一样”的依据。