javascript - 用 Jest 测试 setTimeout 上的毫秒参数

标签 javascript jestjs mocking settimeout spy

我有一种使用带有 setTimeout 的 promise 触发暂停的方法:

pause = ({ time } = {}) => {
  const pauseTime = time || 500;

  return new Promise((resolve) => {
    setTimeout(() => {
      resolve()
    }, pauseTime)
  })
}
我想用 Jest 来测试它,期望 timeout 函数获取 pause 方法接收的时间参数。
jest.useFakeTimers();

const setTimeoutSpy = spyOn(window, 'setTimeout')
const pausePromise = pause({ time: 2500 })


await jest.runAllTimers();

pausePromise.then(() => {
  expect(setTimeoutSpy).toHaveBeenCalledTimes(1);
  expect(setTimeoutSpy).toHaveBeenCalledWith(2500);
})

jest.useRealTimers();
return pausePromise
我尝试过模拟和 spy 。也尝试过没有计时器并等待 promise 。但我总是得到相同的结果:预期 spy 被调用了一次,但它被调用了零次。
任何的想法?
谢谢!

最佳答案

最后我发现了这个问题。
这是 spy 实现的一个问题:

  • 我在做spyOn(...而不是 jest.spyOn(...
  • 我改变了我监视的对象 windowglobal

  • 感谢大家的评论!

    关于javascript - 用 Jest 测试 setTimeout 上的毫秒参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65135435/

    相关文章:

    javascript - Instagram 公共(public) API 的新 CORS 政策?

    unit-testing - JEST 不会触发模拟函数 Vue js

    java - 如何构建一个非常基本的基于 jsp/servlet 的 "model 2"Web 服务用于测试,不包含 Struts 等?

    node.js - 模拟包含命名和默认导出的导入

    javascript - 如何在 Typescript 中正确导入 MomentJS 解决以下错误 : "Type ' typeof moment' has no compatible call signatures.》

    javascript - 单击按钮时隐藏/显示隐藏的 div

    javascript - 如何仅使用 javascript 制作此切换菜单?

    android - React Native 应用程序 - 在 Android 8 真实设备上启动时崩溃/关闭

    typescript - MongoMemoryServer ;未处理的错误

    testing - 如何在返回带有上下文参数的函数的函数中模拟 koa 上下文