如何模拟window.Raven与Jest

时间:2017-05-10 12:46:32

标签: javascript unit-testing jestjs sentry

我正在为Redux应用程序对一块定制的Sentry中间件进行单元测试。选择的测试框架是Jest。我已经尝试了每一种方法来模拟window.Raven并且无法使其正常工作。

window.Raven = {
   isSetup: jest.fn(() => false)
}
...
expect(Raven.isSetup).toHaveBeenCalled()

我错过了什么?我需要使用jest.setMock('raven-js')吗?

3 个答案:

答案 0 :(得分:2)

我维护raven-for-redux,这也许不出所料,是Raven中间件或Redux。它包括一个Jest测试套件,所以我不得不解决类似的问题。我选择使用Raven.setTransport()来指定自定义传输,而不是模拟Raven。这允许我在测试中避免网络调用,但仍然测试Raven正在尝试做什么。

您可以在此处找到整个测试:https://github.com/captbaritone/raven-for-redux/blob/master/index.test.js

答案 1 :(得分:0)

您必须像这样模拟导入的模块:

import Raven from 'raven-js' 
jest.mock('raven-js', ()=> ({
  isSetup: jest.fn(() => false)
}))

it('should call raven',()=> {
  //run you code
  expect(Raven.isSetup).toHaveBeenCalled()
})

答案 2 :(得分:0)

它最终必须成为这样,在Jest 20中的api改变可能......

jest.mock('raven-js', () => {
    return { isSetup: jest.fn(() => false) }
})