先给结论:把“组件本身是否正常”与“组件在某个页面上下文里是否正常”拆成两组验收样例。前者固定输入、固定容器、固定数据,只验证组件自身;后者保留真实页面结构、真实相邻元素、真实数据形态,只验证上下文。两组样例都通过,才能判定问题不在组件,而在页面差异;只跑其中一组,往往会得出相反的错误结论。
同一组件在不同页面表现不同,常见原因不在组件代码,而在三个被忽略的条件:容器宽度与层叠上下文、页面级样式覆盖、以及数据形态差异。构造验收样例前,先用一组可区分原因的证据定位方向。
这三组证据的作用是缩小范围,不是直接下结论。例如禁用样式后恢复,也可能只是恰好绕开了某段脚本注入的行内样式,需要再回到元素检查确认来源。
定位方向后,验收样例的构造方式取决于你更担心哪一类回归。
条件一:组件被多个页面复用,且改动频繁。此时优先做隔离样例。给组件一个最小可运行页面,固定容器尺寸、固定主题变量、固定一组边界数据(空值、超长文本、单条与多条)。每次改动组件后先跑隔离样例,通过后再进入真实页面。这样做的代价是要维护一份独立的样例页,收益是回归定位快,出错时能立刻判断是不是组件自身的问题。
条件二:页面结构复杂,样式与脚本相互影响大。此时优先做上下文样例。直接选取两个真实页面——一个表现正常、一个表现异常——把它们的完整结构、相邻元素和加载顺序都保留,只替换需要验证的数据。这样做的代价是样例较重、跑得慢,收益是能捕捉到隔离环境里永远复现不了的覆盖与冲突。
两种选择并非互斥。可行的顺序是:先用隔离样例确认组件自身稳定,再用上下文样例确认页面集成无误。反过来先跑上下文样例,一旦失败,你无法判断是组件坏了还是页面污染了它。
假设某列表组件在列表页正常,在详情页侧栏出现文字截断。按上面的方法构造两组样例:
<div style="width:320px">,传入同样的三条数据,观察是否截断。若隔离样例正常、上下文样例截断,说明差异来自侧栏的容器约束或继承样式,下一步应检查该容器的宽度来源与溢出规则,而不是修改组件内部逻辑。若两组都截断,则问题在组件对窄容器的处理,应回到组件本身补充边界处理。这个例子的数字仅用于说明比较方法,不代表任何实际项目的测量结果。
构造样例时,至少要把以下例外写进用例,否则样例通过也不代表页面可用:
执行动作上,建议把隔离样例与上下文样例分别记录为可重复运行的检查项:隔离样例固定容器与数据,上下文样例固定页面快照。每次组件或页面样式变更后重跑,记录哪一组先失败。这个记录直接影响下一步——隔离样例先失败就查组件,上下文样例先失败就查页面集成。若两组同时失败,先修组件,再回到页面复测,避免在污染的上下文里反复调试。
需要说明的适用条件是:这套方法针对的是可复现的表现差异。若差异只在特定设备、特定网络状态或特定登录态下出现,样例还需要补上对应的环境条件,否则隔离与上下文两组样例都可能漏掉真正的触发因素。构造验收样例的目的不是证明组件没问题,而是让每一次失败都能指向一个确定的排查方向。