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

IT技术 javascript reactjs mocking jestjs
2021-05-08 18:47:36

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

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

这就是它为了 arg 所做的

然后我在别处调用它

if(myFunc()){

}else{
}

当我注销它时,它不断地显示为假。但是,当我在测试中像这样嘲笑它时:

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

那么为什么当我从索引文件中记录它时它仍然返回错误?或者这不是嘲笑的工作方式?

1个回答

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

正确的方法可能是将 myFunc 移出 myModule。但是如果你想把它保留在那里,那么你将不得不部分模拟 myModule:

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

但是认真考虑将 myFunc 移出 myModule,因为部分模拟是困难和混乱的。