先给结论:当同一组件在不同页面表现不同,验收样例不应只写“组件正常显示”,而要先把差异归因到页面上下文,再为每个上下文各建一条可复现的最小样例。只有确认差异来自页面级变量而非组件本身,才适合继续复用该组件;否则应停止替换,先修复上下文依赖。
同一组件在不同页面表现不同,常见原因不在组件代码,而在页面传入的数据、容器宽度、加载顺序或权限状态。构造验收样例前,先做一次归因:把组件放到一个空白页面,只传入最小数据,观察是否仍异常。如果空白页正常,说明问题来自原页面的上下文,而不是组件本身。此时验收样例的重点应放在“页面上下文”上,而不是反复测试组件内部。
一个可操作的判断方法是:记录三条信息——组件接收的参数、所在容器的宽度范围、页面是否在组件之前加载了其他脚本。若三条中任意一条变化后表现随之改变,就把这条变量写入验收样例的前提条件。
验收样例的价值在于可复现。针对同一组件的不同表现,至少建立两类样例:一类是正常页面,一类是异常页面。每条样例只保留一个差异变量,其余条件保持一致。例如,假设某列表组件在商品页正常、在文章页错位,那么样例A为“商品页容器宽度”,样例B为“文章页容器宽度”,两条样例的组件参数和加载顺序完全相同。这样做的结果是:当样例B复现错位后,下一步动作就明确为检查文章页容器,而不是继续修改组件。
如果差异无法用单一变量复现,说明当前验收样例还不够小。此时应继续缩小页面范围,直到能稳定触发或稳定不触发。
在旧内容或旧系统退出阶段,组件本身可能仍有价值,但旧页面的上下文依赖不值得保留。验收样例应明确区分“组件可复用”和“旧页面可保留”。如果组件在最小样例中正常,只是旧页面存在特殊样式或脚本,那么可以保留组件,退出旧页面。反之,如果组件离开旧页面就无法正常工作,说明它并未真正独立,继续复用会把旧依赖带入新页面。
一个实际动作是:先在新页面用最小样例接入组件,再逐步增加旧页面才有的条件。每增加一个条件就记录表现变化。当某条件导致表现异常时,停止增加,并把该条件列为退出项,而不是继续适配。
如果同一组件在不同页面表现不同,但差异实际来自接口返回的数据结构,那么按页面上下文构造验收样例就会失效。此时即使容器宽度、加载顺序完全一致,组件仍会表现不同。识别方法是:把两个页面的接口返回数据互换,观察表现是否跟随数据变化。若表现跟随数据,验收样例应改为数据样例,而不是页面样例。这一步决定了下一步动作是修数据映射,还是修页面容器。
完成上述归因后,下一步不是继续增加样例数量,而是用一条稳定失败的样例锁定退出范围。具体做法是:保留能复现问题的最小样例,标注它依赖的页面条件,然后决定该条件是修复、移除还是隔离。如果条件可以移除且组件恢复正常,就移除后重新验收;如果条件无法移除,就把该页面或该依赖列入退出清单,不再作为组件复用场景。这样验收样例才真正服务于退出决策,而不是变成又一份笼统的检查清单。