先给结论:不要继续在出问题的页面上反复调试,而要把“组件本身”和“页面环境”拆成两个可独立验收的对象,分别构造样例。具体做法是:固定组件输入,只改变页面级条件,一次只动一个变量,并记录该变量变化后组件输出的差异。下面用一个假设情境把决策过程走完。
假设你做了一个商品卡片组件,在列表页显示正常,在详情页的推荐区却出现按钮错位、文字被截断。你已经试过改组件内部的间距和字号,改完列表页又变样,于是陷入来回改的循环。
这时要先判断:组件在两类页面里拿到的输入是否一致。常见差异来自三处——容器宽度、继承的字体与行高、以及页面级样式对标签的覆盖。如果这三项不同,那么“组件表现不同”就不是组件缺陷,而是环境差异被组件放大了。
一个可区分的证据是:把详情页推荐区的容器宽度临时设成与列表页相同。如果错位消失,问题在容器;如果仍然错位,问题更可能在继承样式或页面级覆盖。这个动作的结果直接决定下一步该改页面还是改组件。
验收样例的价值在于可比。把条件分成组件侧和页面侧两组,每次只让一组中的一个变量变化:
构造样例时,先固定组件侧全部条件,只改页面侧一个变量,观察组件输出是否变化。反过来再固定页面侧,只改组件侧一个变量。两组分开跑,才能知道差异由谁引入。
如果两组单独跑都正常,但组合起来异常,说明存在交互条件,例如窄容器叠加长标题。这类情况要单独留一个样例,不能靠单变量样例覆盖。
继续上面的假设情境。你建立三个样例页面:
如果 A 正常、B 异常、C 正常,那么可以判断触发条件是“窄容器 + 长内容”,而不是组件在详情页本身有问题。下一步就不是改组件默认样式,而是给组件加一个在窄容器下的换行或截断规则,并回到 B 复验。
这里的关键是:样例 B 和 C 只差容器宽度,所以差异可以归因到容器;样例 A 和 B 只差内容长度,所以差异可以归因到内容。归因清楚之后,修改才有方向。
每个样例至少记录四项:容器宽度、父级字体与行高、传入内容特征、组件实际渲染出的关键尺寸(例如按钮高度、文本行数)。只写“显示异常”无法比较,也无法复现。
如果某项指标在多个样例中都相同,却仍出现差异,说明还有未记录的页面级条件,例如某个全局选择器命中了组件内部标签。这时要检查页面级样式的作用范围,而不是继续调组件参数。
需要提醒的是,某个样例下抓取量或请求量归零,并不能单独证明你的判断正确,它也可能是缓存、加载顺序或统计口径造成的。验收样例要解决的是表现差异的归因,不是用单一指标下结论。
当你能用一句话说清“在什么条件下组件会异常,在什么条件下正常”,并且这句话能被另一个样例复现时,就可以停止扩张样例数量。继续增加相似样例只会重复同一结论。
反过来,如果新样例推翻了你之前的归因,说明遗漏了一个条件,应把它补进变量清单,再重跑对照。验收样例不是一次写完的清单,而是随归因更新的一组对照条件。