结论是有条件的:当同一组件在列表页正常、在详情页异常时,先不要改组件本身,而应构造一组能区分“数据差异”“上下文差异”“加载顺序差异”的验收样例。只有把差异复现成可切换的输入条件,验收结论才站得住;若组件依赖父容器的宽度、语言方向或异步数据,而你的样例只固定了屏幕宽度,那么结论会失效。
同一组件在不同页面表现不同,最常见的两类原因并不在同一层。数据差异指传入组件的字段为空、长度不同、类型不同;环境差异指父容器宽度、字体、语言、主题变量或加载时机不同。验收样例要先把这两类分开,否则你会把数据问题误判为样式问题。
一个可执行的动作是:为组件准备三组输入——最短数据、最长数据、缺失字段数据,各跑一遍列表页和详情页。如果异常只在“最长数据+详情页”出现,那么下一步应检查详情页的容器宽度和换行规则,而不是改组件模板。这个动作的结果直接决定你接下来查样式还是查数据。
当现象与直觉相反,例如组件在窄屏正常、宽屏错位,需要能互相区分的证据,而不是凭感觉猜。
这三种证据的价值在于可核对:每一步都能记录输入条件和观察结果,而不是只留下“有时候会错”的描述。
假设某卡片组件在列表页显示正常,在详情页右侧栏出现文字溢出。可以构造如下样例,数字仅用于说明比较方法:
若A、B正常而C、D异常,说明问题与容器宽度和父级裁切有关,验收项应写成“在宽度320至600像素、标题长度10至40字范围内,卡片内容完整可见”。这样写出的验收项可复现,也能交给后续修改的人直接使用。
反例是:组件内部依赖浏览器原生特性,而两个页面的文档模式或渲染模式不同。此时即使数据、容器宽度、加载顺序都一致,表现仍可能不同。这种情况下,上述样例无法区分原因,需要先统一文档模式,再重复同一组样例。若统一后差异消失,说明之前的结论建立在不可比的环境上,应作废重测。
另一个失效条件是组件带有缓存或延迟初始化。若第一次渲染被缓存,第二次进入页面时不再执行相同逻辑,那么按固定顺序跑的样例会得出错误结论。此时应在每次样例前清理状态,或明确记录“首次进入”和“再次进入”两种条件。
把上述区分结果写成一张验收记录:每个样例注明输入数据、容器条件、加载时机、观察结果。若某个样例无法稳定复现,不要直接标记为通过,而应记录为“条件不足,待补充”。下一步动作是先补齐缺失条件,再决定是修改组件、修改父容器,还是修改数据校验规则。
这样做的结果会影响后续范围:如果差异被定位在父容器,修改范围通常小于改组件;如果被定位在数据校验,则应同步检查其他复用该组件的页面,避免同一问题在别处再次出现。验收样例的意义不是证明组件没问题,而是让每个结论都有可以重新走一遍的路径。