sinon usefaketimers模拟延迟承诺超时

ulydmbyx  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(262)

我使用 PromisesetTimeout 详情如下:

await new Promise((resolve) => setTimeout(resolve, 200))

我有一个函数调用此延迟:

const fn1 = async (v) => {
  console.log(v)
}

const fn2 = async () => {
  await fn1(1111111)

  await new Promise((resolve) => setTimeout(resolve, 200))

  await fn1(2222222)
}

然后我试着用 useFakeTimers 从…起 Sinon 模拟单元测试中的延迟( Mocha ):

const sinon = require('sinon')

describe('Test 1', () => {
  it('Test 1.1', async () => {
    const sb = sinon.createSandbox()

    sb.useFakeTimers()

    await fn2()

    sb.clock.tick(500)

    expect(1).to.equal(1)

    sb.clock.restore()
  })
})

我预料 sb.clock.tick(500) 模拟500毫秒的时间流逝,以保证延迟( await new Promise((resolve) => setTimeout(resolve, 200)) )会解决,, 2222222 会被打印出来,测试就会通过。
但是,我得到了以下错误:

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

我不确定我的理解是否正确 useFakeTimers 这是错误的。。。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题