先给结论:不要按“组件本身有没有问题”来验收,而要按“同一组件在哪些页面条件下会变、变到什么程度算可接受”来构造样例。做法是把组件出现差异的页面按变量分组,每组选一个可复现的代表页面,记录该页面上的输入条件和期望输出,再逐项对照。验收对象不是组件代码,而是“组件+所在页面上下文”的组合。
同一组件在不同页面表现不同,常见原因有四种:页面传入的数据不同、容器宽度不同、页面加载的其他样式覆盖了组件、页面上的脚本执行顺序不同。这四类原因对应的验收样例完全不同,所以第一步不是改组件,而是分类。
一个可操作的分法:在出问题的两个页面上,分别记录组件所在容器的实际宽度、组件接收到的字段值、该页面额外加载的样式表数量、组件初始化前后的脚本顺序。如果只有字段值不同,差异属于数据驱动;如果字段值相同但容器宽度不同,差异属于布局驱动;如果两者都相同却仍不同,优先怀疑样式覆盖或脚本时序。
这一步的动作结果会直接决定下一步:数据驱动的问题,验收样例只需覆盖不同字段值;布局驱动的问题,验收样例必须覆盖不同容器宽度;样式覆盖的问题,验收样例要包含“单独打开组件页”和“嵌入目标页”两种环境。
假设一个常见场景:同一个产品卡片组件,在列表页显示正常,在详情页侧栏出现文字截断。此时不要直接写“修复截断”,而应把两个页面转成一组样例。
这样构造出的样例,任何人拿到都能复现同一现象,而不是依赖“我这边看着不对”这种描述。
实际操作中通常有两种做法,各有成立条件。
按页面逐个验收适合页面数量少、组件使用方式差异大的情况。代价是样例数量随页面增长,维护成本高,但能覆盖每个页面的真实上下文。如果资阳企业建站项目里同一组件只出现在三五个页面,且每个页面的容器和字段都不同,这种做法更稳。
抽出一组公共样例适合组件被大量页面复用、差异主要集中在少数几个变量的情况。代价是可能漏掉某些页面特有的样式覆盖。成立条件是:你已经确认差异只来自少数变量,并且这些变量能被样例覆盖。判断依据是前面分类步骤的结果——如果差异原因超过三类且互不相关,就不适合抽公共样例。
选择之后要写清代价:选逐个验收,就要接受样例维护成本;选公共样例,就要接受对边缘页面的覆盖不足,并约定边缘页面单独补样例。
假设某资阳企业建站项目里,同一导航组件在首页正常、在内页出现下拉错位。按上述方法,先记录首页与内页的容器宽度、导航项数量、页面是否加载了内页专属脚本。假设记录显示:首页导航项为 6 个,内页为 9 个,容器宽度相同,内页多加载了一个脚本。
据此构造三组样例:6 项无额外脚本、9 项无额外脚本、9 项有额外脚本。如果只有第三组复现错位,说明问题与脚本时序有关,下一步就应围绕脚本加载顺序调整,而不是改导航组件的样式。如果前两组也复现,说明与导航项数量有关,下一步应检查组件对项数的处理逻辑。这个假设例子的价值在于:样例把“哪里不同”变成了“哪一组条件下不同”,从而把修复方向缩小到一个可验证的范围。
每组样例至少记录四项:页面标识、变量取值、期望结果、实际结果。实际结果里不要只写“异常”,要写具体表现,例如“第 7 项文字被容器右边界裁掉约两个字符宽度”。这样后续修改后可以逐项对照,判断是修好了还是只是换了一种异常。
另外,验收样例应在组件变更后重新执行,而不是只在首次上线时执行一次。如果某次变更后,原本正常的样例组出现新差异,说明变更影响了页面上下文,需要回到分类步骤重新判断。把样例和分类记录放在一起维护,下一次遇到同类问题时就不必从零排查。