我有一个返回 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 {
...jest.requireActual('./myModule'),
myFunc: jest.fn()
}
})
但请认真考虑将 myFunc 从 myModule 中移出,因为部分模拟既困难又令人困惑。
我发现解决问题的一种方法是使用类。
这是一个伪示例:
实施
export class Location {
getLocation() {
const environment = this.getEnvironmentVariable();
return environment === "1" ? "USA" : "GLOBAL";
}
getEnvironmentVariable() {
return process.env.REACT_APP_LOCATION;
}
}
测试
import { Location } from "./config";
test('location', () => {
const config = new Location();
jest.spyOn(config, "getEnvironmentVariable").mockReturnValue("1")
const location = config.getLocation();
expect(location).toBe("USA");
});