先别急着判定是组件坏了。同一组件在不同页面表现不同,通常有两种成立条件完全不同的解释:一是组件本身在特定上下文里被触发或限制,二是页面环境提供了不同输入。要构造能区分两者的验收样例,需要把“组件”拆成可单独替换的输入,再固定其他变量逐项核对。验收样例的目的不是证明谁对,而是让分歧变成一组可以共同查看的对照结果。
第一种解释是组件在特定页面被限定。比如某个区块只在首页展示完整内容,在列表页被截断,这是容器或模板规则决定的,组件本身没有变化。第二种解释是页面给组件的输入不同。同样一个表单组件,在A页面拿到的是已登录状态,在B页面拿到的是未登录状态,渲染结果自然不同。
这两种解释的区分点在于:改变输入后表现是否跟着变。如果输入相同但表现仍不同,问题更可能出在组件或容器规则;如果输入一致后表现也一致,那原先的差异来自页面环境,而不是组件本身。
构造样例时,不要写“首页正常、内页异常”这种笼统描述。要把每个样例写成三部分:固定条件、替换变量、观察结果。固定条件包括同一组件版本、同一数据来源、同一浏览器宽度;替换变量只允许一个,比如页面类型、登录状态或数据条数。
每个样例只替换一个变量,这样出现差异时,能直接指向是页面规则、数据量还是状态导致的。多个变量同时变化,即使结果不同也无法判断原因。
假设一个全包项目里,产品经理认为按钮组件在详情页失效,开发认为按钮在列表页正常。可以构造这样一组对照:
这个假设例子的价值在于:它把“按钮坏了”拆成数据输入和容器规则两个可分别验证的方向。验收时不需要争论谁对,只需要看替换数据后按钮是否恢复。
记录时至少保留四项:组件版本、页面路径、替换的变量、替换后的结果。前三项决定样例是否可复现,第四项决定下一步是改数据、改容器还是改组件本身。
如果替换数据后表现一致,下一步应检查页面容器或模板规则;如果替换数据后表现仍不一致,下一步应检查组件自身的挂载条件与初始化逻辑。若替换页面后表现一致,说明原先差异来自页面环境,而不是组件缺陷。这个判断会直接影响修改范围:改错范围会引入新的不一致,而改对范围只需调整一处输入或规则。
一个常见误区是把“某个页面正常”当成组件没问题。正常页面可能只是恰好提供了组件需要的输入,换一个页面就会暴露差异。另一个误区是同时替换页面和数据,这样即便结果变了,也无法判断是哪一个变量在起作用。
适用条件也需要说清楚:验收样例只覆盖被替换的变量,不能证明组件在所有页面都正确。它解决的是“同一组件在不同页面表现不同”这一具体分歧,而不是替代完整回归测试。如果样例中替换的变量本身没有明确定义,比如登录状态在测试环境里不稳定,那么样例结果也无法作为判据,需要先固定这个前提再继续。
构造验收样例的核心动作是:每次只替换一个变量,并记录替换前后的对照结果。这个动作会让下一步的修改范围从“整个组件重写”缩小到“调整某一处输入或容器规则”,从而减少不必要的返工。