先给结论:不要为每个页面单独写一套验收标准,而应把组件拆成“结构、样式、数据、环境”四类变量,在验收样例中固定其中三类、只放开一类做对比。这样既能定位差异来源,也不会让样例数量随页面数无限膨胀。下面从一次真实的矛盾现象说起。
假设你在做一个内容型站点,导航组件在首页正常展开,到了列表页却高度塌陷、二级菜单被裁切。单看首页,验收是过的;单看列表页,也能勉强用。问题出在“同一组件被放进不同上下文后,表现不一致”。
这类现象在拉萨网站开发中并不少见,因为本地项目常同时存在多套模板、多语言版本或历史遗留样式。验收如果只挑一个“看起来没问题”的页面作为代表,规模化后就必然出现例外。
解释一:样式作用域冲突。组件样式依赖了父级类名或全局选择器,换到另一个页面时,父级结构不同,样式命中范围随之改变。典型证据是:把组件单独放进一个空白容器测试,表现正常;放进列表页的卡片容器,表现异常。
解释二:数据与容器尺寸差异。组件本身没问题,但不同页面传入的数据长度、条目数量、容器宽度不同,导致换行、溢出或高度计算变化。典型证据是:把首页的数据替换成列表页的数据,异常复现;把列表页数据换成首页数据,异常消失。
两种解释的区分点在于:异常是否跟随容器结构走,还是跟随数据走。验收样例应分别构造这两组对照,而不是笼统地“多测几个页面”。
可操作的做法是先列一张变量表,再按“控制变量法”生成样例。假设某导航组件要在首页、列表页、详情页三处出现,变量如下:
flex、是否设了固定高度、是否被 overflow: hidden 裁切。验收样例只需覆盖“正常、边界、异常”三种取值组合,例如:
这样每组样例都能回答一个明确问题,而不是“再多看一个页面”。
假设首页导航高度为 64px,列表页导航高度变成 48px。你可以做两个对照:
对照 A:把列表页的父容器类名替换成首页的,其他不变。如果高度恢复正常,说明差异来自结构或样式作用域。此时下一步应检查父级选择器,而不是改组件本身。
对照 B:保持列表页容器不变,只把菜单数据换成首页的。如果高度仍异常,说明数据不是主因;如果恢复正常,说明是数据长度触发了换行或高度计算。下一步应约束数据边界,而不是调整父容器。
这个例子的数字仅用于说明比较方法,不代表任何真实项目的测量结果。关键是每一次只改一个变量,并记录改前改后的可观察差异。
以下条件成立时,上面的样例设计才适用:组件在多个页面复用、页面结构存在差异、差异可被稳定复现。如果组件只出现在一个页面,或差异只在特定网络条件下偶发,则不应套用这套对照法,而应先确认是否属于环境或加载时序问题。
另外,验收样例不应无限扩张。当页面数量增加时,优先合并“结构相同、数据不同”的页面为一组样例,只对结构明显不同的页面单独建组。判断标准是:如果两个页面对组件的影响可以归为同一类变量,就合并;否则才拆分。这样既覆盖了例外,也不会让验收成本失控。
最后,把每次定位到的差异写回样例说明中,注明“该样例用于区分哪两种解释”。下一次同类组件变更时,这些样例就能直接复用,而不必重新猜测问题出在哪里。