Javascript 模仿一个函数开玩笑,但开玩笑地调用原始函数

Javascript 模仿一个函数开玩笑,但开玩笑地调用原始函数,javascript,reactjs,mocking,jestjs,Javascript,Reactjs,Mocking,Jestjs,我有一个返回true或false的函数,我们称它为myFunc myFunc (){ if(something){return true} else{return false} } 这就是它为了arg所做的 然后我把它叫做别的地方 if(myFunc()){ }else{ } 当我注销它时,它总是显示为错误。然而,当我在测试中这样嘲笑它时: const myMock = (myModule.myFunc = jest.fn()) myMock.mockReturnValue(tru

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

myFunc (){
  if(something){return true}
  else{return false}
}
这就是它为了arg所做的

然后我把它叫做别的地方

if(myFunc()){

}else{
}
当我注销它时,它总是显示为错误。然而,当我在测试中这样嘲笑它时:

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

那么,当我从索引文件中记录它时,为什么它仍然返回为false呢?或者这不完全是模拟的工作方式吗?

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

正确的方法可能是将myFunc移出myModule。但是,如果您想将其保留在那里,则必须部分模拟myModule:

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

但是认真考虑把MyFunc移出MyMoCube,因为部分嘲弄是困难和迷惑的。

我把它叫做别处……code>if(myFunc)应该是
if(myFunc())
,我错了吗?我不知道这是否与问题有关。令人担忧的拼写错误,好的地方,但不是主要问题的修复