You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两层嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:45:01