先把“表现不同”拆成可观察的差异,再为每个差异写一条只改变一个条件的验收样例。同一组件在A页正常、B页异常,通常不是组件本身坏了,而是它继承的宽度、数据量、权限或加载顺序不同。验收样例要能复现这种差异,而不是只截一张正常页面的图。
把差异归入四类:容器尺寸、数据形态、访问身份、加载顺序。容器尺寸指组件所在栏宽、栅格列数或弹层宽度不同;数据形态指条数、字段长度、空值、图片比例不同;访问身份指登录与否、角色不同;加载顺序指组件是否依赖异步数据或后插入的DOM。
只有一类差异时,一条对照样例就够:同一组件分别放进最窄和最宽容器,其他条件保持一致。两类以上差异同时存在时,不要合并成一条“综合测试”,否则失败后无法判断是宽度还是数据量导致。此时按差异数量拆成对应条数,每条只改变一个变量。
打开出现问题的两个页面,记录四项:组件外层容器的实际宽度、组件接收的数据条数、当前访问角色、组件挂载时依赖的资源是否已就绪。这四项就是样例的输入参数。把它们写成一行文本,例如:容器=320px;条数=1;角色=访客;依赖=已就绪。
然后构造对照行,只改一项:容器=320px;条数=8;角色=访客;依赖=已就绪。两行之间的差异就是这条样例要验证的内容。若实际页面的差异来自角色,就把角色改成登录用户,其余保持不变。这样每条样例都能回答“是不是这一项造成的”。
不必在正式站点里反复切换页面。做一个只包含该组件和必要外层容器的静态页,用查询参数控制输入,例如?w=320&n=8&role=guest。页面读取参数后渲染对应状态,这样同一地址就能覆盖多条样例,且不会受其他模块干扰。
动作与结果的关系要明确:如果改宽度后异常消失,说明问题在容器约束;如果改数据条数后异常出现,说明问题在列表渲染或高度计算;如果改角色后才复现,说明问题在权限分支。下一步就只针对被定位的那一项修改代码或样式,不再同时调整其他变量。
假设某业务站的三栏卡片组件在首页正常,在分类列表页出现高度不齐。先记录首页条件:容器宽度约1140px、卡片简介两行、无标签;列表页条件:容器宽度约760px、简介四行、带三个标签。
构造三条样例:第一条只把宽度改为760px,简介仍两行、无标签;第二条宽度保持1140px,简介改为四行;第三条宽度1140px、简介两行,但增加三个标签。若第一条就复现错位,优先检查栅格最小宽度与卡片内部换行;若第二条复现,检查简介行数是否撑破固定高度;若第三条复现,检查标签容器是否溢出。这个例子的数字仅用于说明比较方法,不代表任何真实站点的测量值。
每条样例通过后,把它转成一条可重复执行的验收条件,写明输入、预期和失败时的排查方向。例如:输入为容器760px、简介四行、带三个标签,预期为卡片底部对齐且不出现横向滚动;失败时先查标签容器宽度,再查卡片高度是否被写死。
当同一组件在更多页面出现第三种表现时,不要直接增加一条大而全的样例,而是先判断新表现是否落在已有的四类差异内。落在已有类别就补充该类别下的极端值;落在类别之外,再新增一类并单独构造对照。这样验收样例的数量随差异类型增长,而不是随页面数量膨胀。