两层嵌套setTimeout实现定时调用函数,Jest测试报错如何解决
问题根因
- 你对时间单位做了多余的转换:题目明确说明第一个参数是毫秒数,你额外乘以1000会将等待时间放大1000倍,导致jest快进指定毫秒数后定时器还未到触发时机,因此函数调用次数为0。
- 传入的函数返回的数字本身也是毫秒单位,同样不需要乘以1000做转换。
修复后代码
const solution = (a, fun) => { setTimeout(() => { let b = fun(); setTimeout(() => { fun(); }, b); }, a); }
验证逻辑说明
按照测试用例逻辑,如果第一个参数a传入的是50,调用
jest.advanceTimersByTime(50)后就会触发第一次fun执行,符合测试第18行的断言要求。假设第一次fun返回值是100,再调用jest.advanceTimersByTime(100)就会触发第二次fun执行,完全符合需求。
内容的提问来源于stack exchange,提问作者Darrion
相关产品推荐
相关产品推荐

