CodeSOD:等待更久” 笔记

CodeSOD:等待更久”

Karen 在规格测试中遇到了不稳定性问题,每运行一千次就会出现几次失败。这些复杂且对时序敏感的测试尽管拥有宽松的超时窗口且单元测试已通过,仍会偶尔失败。问题的根源在于 JavaScript 的 setTimeout:与文档暗示其可能延迟更久不同,在 Node.js 中它实际上可能在指定时间到期之前便调用回调函数。Karen 最初的简单等待函数使用 setTimeout 来引入延迟。经过大量调试后,她发现这种时序不一致是导致测试不稳定的根本原因。为解决此问题,她重写了等待函数,改为每毫秒持续检查已 elapsed 时间。该新函数确保仅在达到目标持续时间后才完成操作,从而防止过早超时。虽然此方案有效,但被认为效率低下,也凸显了功能测试对时序的敏感性问题。此外,它还指出了 Node.js 运行时调度保证的不足。作者对此不得不采用此类变通方案感到沮丧。