先别急着改组件代码。同一组件在不同页面表现不同,最常见的原因不是组件本身坏了,而是页面给了它不同的上下文:容器宽度、父级样式、数据长度、加载顺序、权限状态都可能不同。验收样例要做的,是把这些差异显式列出来,再决定哪些页面保留原样、哪些页面改写调用方式、哪些页面直接退出该组件的使用。
构造样例前,先做一个可区分原因的检查。把同一组件分别放进两类环境:一类是它表现正常的页面,另一类是它表现异常的页面。如果只替换数据、不改变外层结构,异常依旧出现,说明问题更可能在数据形态或组件内部逻辑;如果替换外层容器后异常消失,说明差异来自页面上下文。
这个判断直接决定验收样例的构造方向。前者需要覆盖不同数据长度、空值、特殊字符;后者需要覆盖不同容器宽度、栅格列数、父级样式覆盖。两者混在一起测,样例会越写越乱,最后无法判断某次修改到底修好了什么。
面对旧内容、旧系统或旧合作关系留下的组件调用,处理方式不是只有一种。
取舍依据不是“哪个更先进”,而是差异是否可收敛。如果同一类差异反复出现在多个页面,改写调用约定通常比逐页打补丁更省事;如果差异只集中在一两个即将下线的页面,退出比改写更合理。
验收样例应围绕“同一组件、不同页面”这一对关系来写,而不是只写组件功能清单。可以按下面的顺序组织:
一个假设的例子:某列表组件在A页面显示正常,在B页面出现截断。假设A页面容器宽度为固定值,B页面容器宽度随侧栏折叠变化。此时可构造两个样例:固定宽度下传入长文本、可变宽度下传入同样长文本。如果只有可变宽度下截断,说明差异来自容器而非数据,验收重点应放在容器约束上,而不是改文本截断逻辑。
实际动作可以这样安排:先不改任何代码,只把对照样例固定下来,记录每个页面的容器、数据和期望结果。做完这一步后,你会得到一张差异表。如果差异集中在少数页面,下一步就是针对这些页面改写调用方式;如果差异遍布多数页面,下一步应评估是否统一调用约定,或让旧页面逐步退出该组件。
这个动作的结果直接影响下一步的范围判断:差异表越集中,改写成本越低;差异表越分散,越应该先统一约定再谈修修补补。验收样例的价值不在于一次测完所有页面,而在于让保留、改写或退出的决定有据可依。