我正在为Redux应用程序对一块定制的Sentry中间件进行单元测试。选择的测试框架是Jest。我已经尝试了每一种方法来模拟window.Raven
并且无法使其正常工作。
window.Raven = {
isSetup: jest.fn(() => false)
}
...
expect(Raven.isSetup).toHaveBeenCalled()
我错过了什么?我需要使用jest.setMock('raven-js')
吗?
答案 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) }
})