先给结论:不要急着判定组件坏了或页面写错了,而要把“同一组件”拆成可核对的三层——组件输入、宿主页面上下文、验收观察点。做法是固定输入、只改一个页面条件、记录可复现的差异,再把差异写成双方都能勾选的验收样例。这样,争论会从“我觉得它不对”变成“在什么条件下、哪一项、期望是什么”。
常见情形是:一个表单组件在A页正常显示提示,在B页提示被截断;或者同一张卡片在列表页间距合适,在详情页却挤在一起。此时最容易出现两种对立解释。
解释一:组件本身有问题。支持者会说,既然同一份组件代码,结果就不该不同,所以问题一定在组件内部。解释二:宿主页面改变了组件所处的条件。支持者会说,组件只负责自身结构,页面的容器宽度、父级样式、数据来源或加载顺序不同,结果自然不同。
两种解释都可能成立,但它们的修复动作完全不同。前者要改组件,后者要改页面约束或调用方式。若没有验收样例,团队就会在“改组件”和“改页面”之间来回返工。
要区分两种解释,先看组件接收到的输入是否一致。输入包括传入的数据、配置项、默认值、插槽内容、事件绑定。如果两个页面的输入不同,那么表现不同并不奇怪,问题在调用方而不是组件。
如果输入完全一致,再看宿主环境。宿主环境包括容器宽度、父级样式、页面栅格、字体加载、脚本执行顺序、异步数据到达时间。组件在自身边界内正确,但被放进不同容器后,视觉或交互结果可能改变。
一个可操作的判断顺序是:
这个顺序的价值在于:它让“谁该改”有依据,而不是靠声音大小决定。
验收样例不需要复杂,但必须包含三个部分:前提、动作、可观察结果。前提写清页面与输入条件;动作写清操作步骤;可观察结果写成能勾选的事实,而不是“看起来正常”。
假设一个筛选组件在列表页和搜索页表现不同。可以这样写:
如果窄栏下出现截断,而宽栏下没有,验收样例就把问题定位为“窄栏容器下的布局约束”,而不是“筛选组件整体失效”。下一步动作也随之明确:要么给窄栏补充容器规则,要么让组件在窄容器下切换为紧凑布局。动作的结果会直接影响后续是改页面样式还是改组件适配逻辑。
只记录“有问题”没有复用价值。更有效的做法是留下最小差异证据:同一输入、同一操作、只改一个宿主条件,并记录两个结果。可以用一段简短说明代替截图堆叠,例如:
输入相同;仅容器宽度从 960px 变为 640px;选项文字由单行变为两行并溢出。
这类记录要注明假设,而不是冒充真实项目结论。它的作用是让后来者能重复同一比较,而不是证明某个组件一定有问题。
同时要避免一个常见误判:某个页面请求量、抓取量或某项统计归零,不能单独证明组件处理正确。它也可能是页面未被访问、数据延迟、统计口径变化或样本过少造成的。验收样例只回答“在给定条件下是否可复现”,不替统计现象下因果结论。
不是所有差异都值得写成验收样例。优先写那些会改变修复方向的差异:输入是否一致、宿主条件是否一致、结果是否可复现。对于只出现一次、无法稳定复现的差异,先记为观察项,不急着升级为验收项。
若团队多人对同一事实理解不同,最省返工的做法是让每个人按同一份样例勾选。勾选结果不一致的地方,就是下一个要消除的变量。这样,黄山网站建设中的组件验收就不再依赖口头描述,而是依赖可重复的条件与结果。