先给结论:不要继续在“组件本身有没有问题”上打转,而要把验收样例从“组件单独测”改成“组件加宿主页面条件测”。同一组件在A页正常、B页异常,最常见的原因是它依赖的父级宽度、级联样式或初始化时机被页面改变了。你要构造的样例,应当能区分“组件缺陷”与“宿主条件冲突”这两种解释。
第一种解释是组件自身存在缺陷,比如某状态下渲染错误、事件解绑不干净。第二种解释是组件没有缺陷,但它在不同页面拿到的外部条件不同,导致表现分裂。两者在现象上可能一模一样,处理方向却完全相反:前者要改组件,后者要改页面约定或调用方式。
能区分它们的证据不是“哪个页面好看”,而是把同一组件放进受控的宿主条件里,只改变一个变量。如果变量一换,异常就复现或消失,说明问题在宿主条件;如果无论宿主怎么变,异常都稳定出现,才更接近组件缺陷。
很多团队构造样例时只写“验证组件正常显示”,这无法暴露宿主冲突。有效的样例要显式记录组件所在页面的四个条件:容器可用宽度、祖先元素的布局模式、全局样式影响、组件挂载与数据到达的先后顺序。
具体动作:为出问题的组件建一个最小宿主页,只保留必要的布局容器和该组件,其他样式全部剥离。然后逐项加回真实页面的条件,每加一项就记录表现。结果会影响下一步:如果加回某一项后异常出现,你就不必再改组件内部逻辑,而是去统一该条件在两页之间的差异。
下面这些证据能帮你把“看起来不一样”变成可判断的差异。它们不依赖某个特定框架,也不假设任何插件现成功能。
这些证据的价值在于互斥性:宽度和层叠问题通常与数据无关,时序问题通常与宽度无关。若你换了宽度、清了全局样式、调了数据顺序后异常依旧稳定复现,才应把组件本身列为优先怀疑对象。
假设某组件在列表页正常,在详情页错位。你先在详情页把组件外层容器宽度改成与列表页一致,错位消失。这只能说明宽度是相关条件,不能直接断定“宽度就是原因”,因为改宽度时可能同时触发了别的布局变化。
下一步动作:在最小宿主页里只改宽度、其他条件保持不变,观察是否复现。若复现,验收样例就应写成“容器宽度为X时组件表现符合预期,宽度为Y时不符合”,并把X、Y作为固定验收条件。这样后续任何人接手,都能用同一组条件判断改动是否引入回归,而不是靠肉眼比对两个页面。
验收样例的最终形态不是一张截图,而是一段可重复执行的描述:宿主条件是什么、输入数据是什么、预期表现是什么、判定依据是什么。对嘉定网站设计这类交付场景,建议把每个异常组件都配一个最小宿主页,并把它纳入日常回归范围。
如果某个异常只在特定页面出现,而最小宿主页始终正常,合理的下一步不是继续加截图,而是回到那个页面,逐项核对它的全局样式、布局容器和数据加载顺序。把差异收敛到一项之后,再决定是统一页面约定,还是修改组件。这样处理,验收样例才真正承担了区分原因的作用,而不是把问题记录成一份无法执行的观察报告。