先给结论:不要按“组件名”验收,而要按“组件所处的页面条件”验收。同一个组件在首页、列表页、详情页表现不同,通常不是组件本身坏了,而是容器宽度、内容长度、数据状态或加载顺序不同。构造验收样例时,应把每个差异条件写成一条可复现的页面路径,而不是只截一张图。
假设某黄石网站制作项目里,一个“联系表单”组件同时出现在首页底部、服务详情页侧栏和独立联系页。开发说组件是同一个,测试却发现:首页能正常提交,详情页侧栏的按钮被内容顶出可视区,独立联系页的提示文字换行后遮住了输入框。此时如果只写“联系表单验收通过”,就无法解释这三个页面的差异。
合理的做法是:先承认同一组件在不同页面就是不同验收对象。验收样例要记录四个条件——页面模板、容器宽度、周围内容长度、组件初始状态。缺少其中任何一个,复现结果都可能不一致。
适合组件被严格限制在相同容器和相同数据形态中的项目。代价是:一旦某个页面给它更窄的栏、更长的标题或空数据状态,问题就会漏到上线后。若选择这种做法,至少要补一条“容器宽度下限”的检查,并注明该下限来自哪个页面。
适合同一组件跨多个模板、多个栏目复用的项目。代价是样例数量增加,维护成本上升。控制成本的方法是:不按页面数量铺开,而按“差异维度”取样。例如只取最宽容器、最窄容器、最长内容、空数据四种组合,而不是每个页面都写一遍。
判断依据可以很具体:如果两个页面的容器宽度差超过组件自身最小可用宽度,就应拆成两条样例;如果只是背景色不同,可以合并。这个判断不依赖工具,只依赖你能否说清差异条件。
实际动作是:为每个差异页面建立一条“条件—操作—预期—实际”四列表述,而不是只写预期结果。假设首页样例写成:
做完这一步,下一步不是马上改代码,而是先比较三条样例的“实际”列。如果只有最窄容器那条失败,问题就落在容器与组件的最小宽度约定上;如果三条都失败,才回到组件内部逻辑。这个动作的价值在于把“表现不同”拆成可归因的条件,而不是直接进入反复试改。
可以用一组可区分原因的证据来缩小范围:
这三步不需要复杂环境,但要求每次只改一个条件。若同时改容器和内容,就无法判断是哪一项导致失败。需要说明的是,某条样例通过并不能证明其他页面也通过,它只证明该条件组合下通过。
样例不是越多越好。可以为每类组件设一个退出条件:当所有差异维度都被至少一条样例覆盖,且每条样例都能稳定复现时,就停止增加样例。若后续新增页面引入了新的容器宽度或新的数据形态,再补一条,而不是重写全部样例。
假设某条样例连续两次复现结果不一致,先不要判定组件有问题,而应检查是否遗漏了条件,例如浏览器缩放、字体加载或异步数据返回顺序。把这些条件补进样例后,再决定是修组件还是修页面。这样,验收样例既回答了“同一组件为什么表现不同”,也给出了下一步该改哪里的依据。