先把结论说清楚:同一组件在不同页面表现不同,通常不是组件本身“坏了”,而是它依赖的上下文变了。构造验收样例的关键,是固定组件所处的外部条件,再用最小对照把差异复现出来。下面从两个常见解释入手,给出可核对的证据和动作。
假设你负责一个益阳本地企业站,页头导航组件在首页显示正常,放到产品列表页却出现换行错位。开发说组件没问题,设计说页面不对,运营说用户反馈看不懂。三方都基于自己看到的页面下判断,分歧就产生了。
这时候不要急着改组件,也不要先争论谁的截图对。先把“不同页面”还原成两组可对比的条件:组件被放在哪个容器里、容器宽度是多少、周围有什么元素、加载顺序如何。差异往往藏在这些条件里,而不是组件代码本身。
第一类解释是样式继承与布局上下文不同。组件在首页可能位于一个宽度固定、内边距明确的容器中,到了列表页却放进弹性布局或网格布局,父级字号、行高、盒模型或溢出规则不同,组件内部依赖相对单位的样式就会跟着变。这类差异的特征是:只要把组件放回原容器,表现就恢复正常。
第二类解释是数据量与渲染时序不同。同一个组件在首页只渲染三条数据,在列表页渲染二十条,或者列表页的数据要等接口返回后才插入,组件初始化时拿到的尺寸信息就是错的。这类差异的特征是:页面刚打开时正常,数据加载后错位;或者滚动、切换标签后才出现异常。它和样式无关,和“什么时候拿到什么数据”有关。
区分方法不需要复杂工具,只需要做一次受控替换。把列表页的组件替换成首页用的同一份静态数据,其他容器和样式保持不变。如果错位消失,说明问题更接近数据量或渲染时序;如果错位依旧,说明问题更接近样式继承与布局上下文。这个动作的结论会直接决定下一步:前者去查数据加载和尺寸测量时机,后者去查父容器和样式作用域。
另一条证据来自容器边界。给组件外层临时加一个固定宽度和明确内边距的容器,再看表现。如果恢复正常,说明组件对外部宽度敏感,验收样例里就必须把容器宽度写进去;如果仍不正常,说明组件内部有依赖全局样式的选择器,验收样例要覆盖全局样式的影响。
验收样例不是“页面看起来正常”,而是一组别人可以照着复现的条件。建议每个涉及该组件的页面都记录四项:容器宽度与内边距、组件接收的数据条数与字段、组件挂载时是否已有数据、以及页面中同时存在的其他全局样式。四项一致,表现才具有可比性。
具体可以写成这样的对照清单:
两个对照动作分别指向不同原因。固定宽度后恢复,说明验收样例必须包含容器尺寸;数据前置后恢复,说明验收样例必须包含数据就绪时机。只写“组件显示正常”的验收项,无法覆盖这两种情况。
假设产品列表页的筛选组件在宽屏正常、窄屏换行。先按上面的方法做对照:把窄屏容器改成与宽屏相同的固定宽度,如果换行消失,说明组件依赖可用宽度;如果换行仍在,说明组件内部有最小宽度或长文本未处理。
对应的验收项可以写成:在容器宽度为某一确定值、数据条数为某一确定值、数据在挂载前就绪的条件下,筛选组件不换行、不溢出、不遮挡相邻元素。这里的数值是假设示例,实际取值应以你们项目当前使用的容器和数据结构为准。写清条件后,开发、设计和运营看到的是同一组事实,而不是三张不同的截图。
最后提醒一点:请求量、渲染次数或某个统计指标归零,不能单独证明组件处理正确。它也可能是缓存命中、请求被合并或页面根本没触发该逻辑。判断依据仍然是可复现的对照条件,而不是单一指标的变化。