禁用Jest setTimeout mock

时间:2016-08-11 21:12:40

标签: javascript jasmine jestjs

我正在为依赖于websocket库的代码编写Jest测试。

websocket库被模拟。我想发送一条消息,等待异步操作完成,然后检查响应。

it('sends a message and gets a response', () => {
  processor(ws).sendMessage()  // do a bunch of async stuff, call websocket.sendMessage()
  setTimeout(() => {
    expect(ws.getResponse()).toEqual('all done')
  }, 100)
})

不幸的是,因为Jest模拟了setTimeout,所以setTimeout失败了。如果我运行jest.runAllTimers(),则超时立即发生,因此无法接收消息。

任何想法如何说服jest取消模拟setTimeout或Jasmine解决方法?

1 个答案:

答案 0 :(得分:6)

您可以在测试用例之前添加以下代码。它适用于Jest v14.1.0 -

  jest.useRealTimers()