先给结论:不要为“组件本身”写一份验收样例,而要为“组件 × 页面上下文”写一组最小对照样例。同一组件在A页正常、B页异常,通常不是组件坏了,而是B页多了一个被忽略的条件,例如容器宽度、继承样式、数据形态或加载顺序。验收样例的任务,就是把这个条件单独拎出来复现。
假设有一个衡水本地的企业站项目,导航组件在首页正常展开,在内页却偶尔错位。开发者反复检查组件代码,没发现问题。这时要区分两类原因:一类是组件自身逻辑,一类是页面给它的运行环境。验收样例必须能区分这两类,否则改完一处又坏另一处。
可操作的动作是:固定组件版本与数据,只改变一个页面变量,观察结果是否随之改变。如果改变容器宽度后错位复现,说明问题在布局上下文;如果改变数据条数后复现,说明问题在数据边界。这个动作的结果直接决定下一步是改样式还是改组件入参。
样例不用多,但要成对。每一对只允许一个变量不同,其余全部一致。可以按下面的结构组织:
如果对照样例复现、反向样例消失,这个变量就是有效嫌疑。如果两组都复现,说明还有第二个遗漏条件,需要继续拆分。注意,请求量或抓取量归零不能单独证明某个变量是原因,它也可能只是缓存或采集时点造成的。
验收样例要能交给别人执行,所以上下文必须写成具体字段,而不是“首页那种感觉”。建议至少记录:容器可用宽度、父级是否设置了溢出隐藏、组件接收的数据条数与最长文本、脚本执行时机、以及该页面是否复用了其他页面的样式表。
假设某内页复用了首页的样式表,其中一条选择器命中了组件内部元素。此时验收样例应写成:在相同组件与数据下,加载该样式表与不加载该样式表各跑一次。若只有加载时异常,问题就不在组件,而在样式作用域。这个判断会影响下一步:是收窄选择器,还是给组件加隔离容器。
不要用“看起来正常”作为通过标准。可执行的判定条件是:同一组件在基准、对照、反向三组样例中的表现可预测,且异常页面的变量被明确记录。满足这一点,才算验收样例构造完成。
如果三组样例都无法稳定复现,说明当前样例还缺少触发条件,例如需要特定交互或异步数据到达顺序。这时应补充触发步骤,而不是直接判定组件无问题。验收样例的价值不在于证明它对,而在于让下一次改动有可对照的基准。