先别急着判定组件有缺陷或浏览器有问题。更稳妥的做法是把“表现不同”拆成可核对的变量:页面上下文、数据形态、加载顺序和交互前状态,再针对每个变量各写一条验收样例,让同一组件在受控条件下重复出现。只有样例能稳定复现差异,才谈得上修复或接受。
渲染差异指外观、尺寸、间距、字体或断点位置不一致;行为差异指点击、展开、校验、提交或数据回填的结果不一致。这两类问题的验收样例写法不同:渲染差异要固定视口、字体加载和父容器约束;行为差异要固定初始数据、事件顺序和异步返回时机。
如果只笼统写“组件在A页正常、B页异常”,验收时无法判断是组件本身的问题,还是B页给了它不同的容器宽度、不同的初始数据,或更早触发了一次状态变更。样例必须把“不同”落到可观测的一项上。
构造验收样例时通常有两种路径,选择依据是差异是否依赖页面上下文。
可操作的判断:先在隔离页确认组件在标准条件下是否正常。若正常,回到真实页面逐项加回条件;若隔离页也异常,优先查组件自身与数据输入。这个动作的结果直接决定下一步——是继续排查页面上下文,还是转入组件内部逻辑。
每条验收样例至少记录四项:触发条件、观察位置、预期结果、实际结果。触发条件要具体到视口宽度区间、数据条数、是否已登录、是否已滚动到该区域等。
假设一个例子:某列表组件在详情页显示正常,在首页却出现高度塌陷。就地复现时先只把首页的容器宽度改成与详情页一致,若塌陷消失,说明差异与父容器约束有关;若仍存在,再检查首页是否在组件渲染前改动了数据。这个比较方法只用于定位变量,不代表真实项目结论。
如果差异只出现在极端的旧版浏览器、只出现在你无法控制的第三方嵌入内容中,或修复成本明显高于该页面的实际使用价值,可以把它记为已知限制,而不是无限扩样例。此时应在验收说明里写明适用范围和已知例外,避免后续把它当成回归缺陷反复处理。
另一个例外是:当差异来自上游数据本身不稳定时,继续调整组件验收样例没有意义,应先把数据来源和字段约定固定下来。判断依据是——同一组数据在隔离页也产生不同结果。
每条样例建议写成一句话可执行的形式,例如:在视口宽度为 375 至 768 之间、列表数据为 20 条、未触发过筛选的条件下,打开首页并滚动到列表区域,组件应完整显示且高度不小于其内容高度。这样写的好处是,任何执行者都能得到相同的前置条件,差异是否复现不再依赖个人描述。
样例通过后,把触发条件和预期结果保留在验收文档中,作为后续改动的回归依据。当同一组件再次在不同页面表现不同时,先比对新页面是否满足已有样例的前置条件,再决定是新增样例还是修正组件。整个流程的重点不是一次判定对错,而是让“不同”变成可重复验证的条件组合。