嘲笑一个函数开玩笑,但开玩笑地调用原始函数

时间:2018-06-28 13:44:47

标签: javascript reactjs mocking jestjs

我有一个返回true或false的函数,让我们称之为myFunc

myFunc (){
  if(something){return true}
  else{return false}
}

这就是为了实现arg

然后我在别的地方叫它

if(myFunc()){

}else{
}

当我注销时,它会连续显示为false。但是,当我像这样在测试中嘲笑它时:

const myMock = (myModule.myFunc = jest.fn())
myMock.mockReturnValue(true)

那么当我从索引文件中记录它时,为什么它仍然返回false?还是那不是嘲笑的工作方式?

1 个答案:

答案 0 :(得分:2)

我猜测myModule是您导入的对象,然后在该对象上设置了模拟功能。但是在myModule文件中,您是直接引用该函数,而不是通过模块引用,对吧?

正确的方法可能是将myFunc从myModule中移出。但是,如果您希望将其保留在那里,则将不得不部分模拟myModule:

jest.mock('./myModule', () => {
  return {
    ...require.requireActual('./myModule'),
    myFunc: jest.fn()
  }
})

但是请认真考虑将myFunc移出myModule,因为部分模拟既困难又令人困惑。