先给结论:不要试图找到一个“组件本身是否正确”的答案,而要构造一组能区分“组件被页面环境影响”和“组件自身状态不一致”的验收样例。做法是固定组件输入、只改变页面环境变量,逐项记录输出差异;如果差异随环境变量成组出现,问题在页面侧;如果同一环境下输出仍随机波动,问题在组件侧。下面按这个思路展开。
同一组件在A页面正常、在B页面错位或失效,通常只有两类解释。
这两类的修复方向完全不同。前者改页面,后者改组件或改调用约定。验收样例的价值就在于把两者分开,而不是笼统记一条“组件有问题”。
假设你有一个“折叠面板”组件,在文章页正常,在列表页首次点击无反应。可以这样构造样例:
这个动作的结果会直接决定下一步:如果问题只在“脚本加载顺序靠后”时出现,就应检查组件初始化是否依赖了尚未加载的依赖,而不是去改组件样式。
关键看差异是否可重复且成组出现。
注意,单次“刷新后好了”不能作为结论,它可能只是异步时序偶然对齐。要至少重复几次,并记录每次的环境是否一致。
验收样例不是一句“组件正常显示”,而应包含前提、动作和预期。例如:
前提:容器宽度 320px,父级无 transform;动作:点击折叠面板标题;预期:内容区展开且高度自适应;记录:展开后高度是否为 0。
这样写的好处是,别人复现时不会因为缺少前提而得到不同结果。对于旧内容或旧系统退出场景,还要额外保留一条“退出后组件是否仍被其他页面引用”的检查,避免删掉页面后组件在别处报错。这一步的结果会影响你是否能安全下线旧页面。
如果连续几轮控制变量后,差异仍然无法归因到单一环境项,且组件内部逻辑难以快速定位,可以考虑先隔离:把组件替换为静态占位,确认页面其他部分不受影响,再单独排期处理组件。这不是放弃验收,而是把“页面能否上线”和“组件是否完美”拆成两个决策。隔离动作的结果是:页面可以先行验收,组件问题进入独立任务,不再阻塞整体进度。
最后提醒一点:验收样例要围绕你实际要做的决定来写。如果决定是“这个组件能不能继续用”,样例就应覆盖它最常见的几种页面环境;如果决定是“旧页面能不能下线”,样例就应覆盖下线后残留引用。样例不必多,但必须能回答你当下要做的那个取舍。