结论先行:当同一组件在首页、列表页、详情页表现不一致时,验收样例不应写成“组件显示正常”,而要先固定一个共同输入,再分别记录组件在各页面的输入来源、渲染结果和可观测输出。只有把“不同”拆成可复现的差异项,验收才有意义。若组件依赖页面级数据、样式作用域或异步加载顺序,那么同一份样例在另一个页面必然失效,此时应把验收对象从“组件”改为“组件加页面上下文”。
同一组件在不同页面表现不同,常见原因有四类:页面传入的数据结构不同、父容器样式影响、组件初始化时机不同、页面自身脚本修改了同一节点。验收样例要能区分这四类,否则测试结论会互相覆盖。
一个可执行的判断方法是:先构造一个最小页面,只放该组件和最少的必要参数,记录输出;再把该组件原样放回出现问题的页面,保持参数不变,记录输出。若最小页面正常、原页面异常,差异大概率来自页面环境;若两者都不正常,差异更可能来自组件自身或参数。
这一步的动作会直接影响下一步:如果确认是页面环境问题,验收样例就必须包含父容器、样式文件和加载顺序,而不是只写组件参数。
不要用“显示不对”“样式乱了”这类描述作为验收项。可核对的字段至少包括:输入数据、容器宽度、字体继承、组件挂载位置、交互后状态、控制台报错。每个字段都要写明观察方式,而不是只写期望值。
这些字段的作用是让不同角色对同一事实有共同语言。设计人员关心容器宽度和字体继承,开发人员关心输入数据和挂载位置,测试人员关心交互后状态和控制台报错。字段一致后,分歧才能转成可核对的项目。
假设某组件在首页显示为两列,在详情页显示为单列。先不要写“组件响应式异常”,而是构造如下样例:
在这个假设下,两列与单列的差异更可能来自容器宽度,而不是组件逻辑。下一步动作是只改变容器宽度,其他字段保持不变,再观察列数是否跟随变化。如果列数跟随容器宽度变化,验收样例就应把容器宽度列为必填项;如果不跟随,则要检查组件内部是否读取了页面标识或全局状态。
一个反例是:组件在页面加载后由异步脚本替换内容。此时你记录的初始输入和初始容器宽度都是旧值,异步完成后组件实际面对的是新数据和新容器。按上述字段构造的样例会得出错误结论,因为观察时机不同。
另一个反例是:页面使用了样式作用域或构建时样式隔离,组件在开发环境与构建后表现不同。此时最小页面正常、原页面异常,并不能直接归因于页面环境,还需要对比构建前后产物。若无法确认构建差异,验收样例应增加“构建产物版本”字段,而不是继续增加页面字段。
因此,这套方法适用于组件输入和页面环境相对稳定的场景;不适用于异步替换、构建时样式隔离或页面脚本直接改写组件节点的场景。遇到这些情况,先固定观察时机和构建版本,再谈组件验收。
下一步不是继续争论“到底哪里不对”,而是让每个角色在同一张核对表上填写自己观察到的字段值。设计人员填容器宽度和字体继承,开发人员填输入数据和挂载位置,测试人员填交互后状态和控制台报错。填完后先找字段值不一致的行,再决定是改组件、改页面还是改验收条件。
如果核对表显示只有容器宽度不同,优先调整页面布局或组件宽度策略;如果显示输入数据不同,优先统一数据来源;如果显示挂载位置不同,优先检查页面脚本顺序。每个动作的结果都会影响下一步:只有确认差异来源后,验收样例才能从“组件显示正常”升级为“在指定页面上下文中,给定输入和容器宽度时,组件输出符合约定”。这样,桂林网站设计项目中同一组件在不同页面的表现差异,才能被转成可核对、可复现、可交接的验收项目。