先给结论:不要把“组件在首页正常”当成通过依据,而要把组件放进它实际出现的每一种页面语境里,各建一个最小验收样例,并明确该样例要证明什么。若同一组件只在某一类页面出错,问题通常不在组件本身,而在页面传入的数据、容器宽度、相邻模块或加载顺序。验收样例的价值,是让这些差异可重复、可对比,而不是靠截图争论。
两种做法都成立,但适用条件不同。第一种做法是修组件,让它在任何页面都表现一致;第二种做法是保留页面差异,只修验收样例,承认不同页面本就该有不同呈现。选择依据只有一个:这种差异是设计意图,还是意外结果。
判断动作:让负责该页面的开发和设计各自写一句话,说明“这里应该和别处一样”还是“这里本来就不一样”。两句话不一致时,先对齐预期,再动代码。这个动作的结果直接决定下一步是改组件还是改样例,避免把设计分歧当成技术 bug 反复返工。
一个可用的验收样例不需要复杂,但要能锁定变量。建议每个样例包含四项:页面类型、传入数据、容器条件、预期结果。
假设例子:某卡片组件在详情页显示正常,在列表页却把按钮挤出容器。按上述结构建两个样例,列表页样例填入最长标题和最小容器宽度,运行后若复现溢出,就能确认是容器宽度与截断规则冲突,而非组件逻辑错误。这一步的产出是明确的修复方向,而不是一句“列表页有问题”。
当差异被确认为意图时,选择分页面定制,代价是维护两套样式或两套参数,后续改组件要同步检查所有页面。适用条件是页面职责差异大、统一反而伤害体验,例如列表页需要信息密度、详情页需要可读性。
当差异被确认为意外时,选择统一组件行为,代价是可能要为个别页面增加适配参数,短期改动更大。适用条件是差异只由数据或容器偶然触发,统一后不会牺牲任何页面的核心目标。
一个可区分的证据:把同一组极端数据分别喂给两个页面的该组件。如果只有一类页面出错,问题在页面语境;如果两类都出错,问题在组件本身。这个对比比单独看某一页的截图更有说服力,因为它排除了“这一页刚好数据特殊”的解释。
落地时,先为每个出错页面补一个最小样例,再修代码,最后用同一样例回归。动作顺序不能反:先修代码再补样例,容易漏掉触发条件,下次改版还会复发。
需要注意的例外:某些差异来自加载顺序或异步数据到达时机,静态样例可能复现不了。此时应在样例中注明依赖的加载条件,并在真实环境中用相同条件复核。另外,若差异只在特定浏览器或特定缩放比例下出现,样例要记录该条件,否则结论不可靠。请求量或抓取量归零这类现象不能单独证明修复正确,它也可能是缓存、发布延迟或统计口径变化造成的,应与样例结果交叉验证。
把验收样例和页面语境绑定后,同一组件在不同页面的表现差异就不再是模糊的“有时好有时坏”,而是可定位、可回归的具体条目,后续改版也能据此判断哪些差异该保留、哪些该消除。