Javascript 为什么jest没有正确地模拟我导入的函数?

Javascript 为什么jest没有正确地模拟我导入的函数?,javascript,reactjs,unit-testing,jestjs,Javascript,Reactjs,Unit Testing,Jestjs,我所要做的就是导入一个我在代码中使用的util文件,并对其进行模拟,以便根据测试内容返回true或false 因此,我尝试从“utils/myFunction”中将*导入为myModule 在我的房间里我有 export const myFunctionName=()=>{//does some stuff} constmyspy=jest.spyOn(myModule,'myFunctionName').mockReturnValue(false) 但即使我把这个改成 constmyspy=j

我所要做的就是导入一个我在代码中使用的util文件,并对其进行模拟,以便根据测试内容返回true或false

因此,我尝试从“utils/myFunction”中将*导入为myModule

在我的房间里我有

export const myFunctionName=()=>{//does some stuff}

constmyspy=jest.spyOn(myModule,'myFunctionName').mockReturnValue(false)

但即使我把这个改成

constmyspy=jest.spyOn(myModule,'myFunctionName').mockReturnValue(true)

当我
console.log(myFunctionName)
在我的代码中时,它会同时注销
false

我做错了什么?我如何正确地模拟这个命名的导出函数,以返回我想要的用于测试目的的任何内容

我也试过这个

beforeEach(() => {
    myFunctionName.mockReturnValue(true)
})
但是在我的测试中

myFunctionName.mockReturnValueOnce(false)


没有效果,只有在每次调用spyOn和console.log之前的
中更改它时才会更改。但监视模块对象是不安全的,因为根据规范它是只读的。使用jest.mock.ok,但是我对jest.mock有问题,因为我需要每个测试用例使用不同的实现,但是jest.mock似乎只在顶部模拟一次,您无法更改它。我还尝试了jest.domock,同样的结果您可以随时使用
*Once
方法临时更改实现。@EstusFlask请参阅添加的代码,以显示我在调用spyOn和console.log时未知的其他内容,如我所说。很可能是这样。显然,在调用函数之前应该对其进行模拟。如果希望多次调用它,那么应该有多个mockReturnValueOnce。