先判断差异来自“组件本身”还是“页面给它的上下文”。如果同一组件在A页面正常、在B页面错位或样式失效,验收样例就不该只截一张正常页面,而要构造两组对照:一组保留B页面的真实容器、相邻模块和内容长度,一组只留组件最小上下文。两组都跑通,才说明组件在目标CMS的模板体系里可复用;只跑通最小上下文,说明问题在页面装配规则,而不是组件代码。
同一组件在不同页面表现不同,常见原因可以归成两类,验收动作完全不同。
区分方法很直接:把出问题的页面复制成一个最小测试页,只保留组件和它必须的容器,逐项加回相邻模块、页面级样式、真实数据。哪一步加回去后异常复现,问题就落在哪一层。这个动作的结果决定下一步:如果加回容器就复现,验收样例要围绕模板装配写;如果加回真实数据才复现,验收样例要围绕字段映射和空值处理写。
当组件在首页正常、在栏目列表页或详情页异常时,优先怀疑模板级容器和样式作用域。此时验收样例应包含:
实施动作:先在最小可运行页确认组件基线正常,再在真实模板页复现异常,然后二分注释页面级样式或临时移除相邻模块,定位到具体规则。结果如何影响下一步——如果异常由页面级样式覆盖引起,修复应放在模板或页面样式层,而不是改组件;如果由容器宽度引起,则要在组件里补上对窄容器和宽容器的自适应规则,并把这两种宽度都写进验收样例。
当组件外观正常但内容不对,或只在某栏目、某语言、某权限下异常时,问题更可能在字段映射、空值、排序或缓存。此时验收样例应换成数据驱动:
实施动作:在目标CMS里为同一组件准备上述三条样例数据,分别挂到两个不同页面模板上运行。如果完整数据在两个模板都正常、缺字段数据只在其中一个模板异常,说明该模板没有处理空值,验收项应写成“该模板在关键字段为空时仍输出占位且不报错”。这一步的结果决定修复位置:改模板的数据判断,还是改组件的默认值。
可用的验收样例至少包含:页面标识、模板名、组件所在位置、使用的数据样例、期望结果、实际结果。期望结果要写成可判断的句子,例如“组件在320像素宽容器内不横向溢出,标题超过两行时截断并保留完整链接”。这样任何人换一台设备或换一个账号都能重跑。
假设一个短例子:某组件在首页卡片区正常,在详情页侧栏错位。按上述方法,先建最小可运行页确认基线正常,再把详情页侧栏容器宽度和页面级样式加回,异常复现。结论是问题在侧栏容器与页面样式,而不是组件本身。下一步就把“侧栏窄容器 + 页面级样式”作为固定验收样例,组件修复后必须在这一组样例下通过,而不是只在首页通过。
不是所有差异都值得修。如果差异只出现在已计划下线的旧模板、旧栏目或旧合作关系页面,且这些页面不再承接新内容,可以把它们列入退出清单,而不是继续扩验收样例。判断依据是:该页面是否还会更新、是否还有入口流量、是否仍被其他模块引用。三项都否,就记录现状并安排下线,不把资源投入兼容。
反之,如果旧页面仍需保留部分有价值内容,比如历史文章或已积累的说明页,就只把这些页面的模板纳入验收范围,其余旧模板标记为冻结。冻结不等于删除,而是不再新增验收项,也不再随组件升级做回归。这样既保住有价值的部分,又避免验收样例无限膨胀。最终要形成一份清单:哪些模板必须通过对照样例,哪些模板冻结待退出,以及每个样例对应的数据条件。