我试图模拟一个创建并返回另一个类的类。我有这个:
const mockMethod = jest.fn();
const mockClassA = jest.fn<ClassA>(() => ({
method: mockMethod
}));
jest.mock("../src/ClassB", () => ({
ClassB: {
getClassA: () => new mockClassA()
}
}));由于提升,当jest嘲笑`../src/ClassB“时,mockClassA未定义。
如果您不想提升,我已经读过了,只需使用doMock:
当使用babel-jest时,对模拟的调用将自动挂起到代码块的顶部。如果要显式地避免此行为,请使用此方法。
https://jestjs.io/docs/en/next/jest-object#jestdomockmodulename-factory-options
当我使用mock运行时,我得到了TypeError: mockClassA is not a constructor,因为mockClassA是未定义的,因为mock被悬挂在mockClassA的定义之上。
当我将mock更改为doMock时,它根本不模拟模块--它使用的是真实的模块。
编辑:在线解说它们意味着我不能很容易地访问被模仿的检查方法:
jest.mock("../src/ClassB", () => ({
ClassB: {
getClassA: () => ({
method: jest.fn()
})
}
}));因为getClassA是一个函数,所以它用method返回对象的单独实例。
编辑2:啊!设法将其内联如下:
jest.mock("../src/ClassB", () => {
const mockMethod: jest.fn();
return {
ClassB: {
getClassA: () => ({
method: mockMethod
})
}
};
});发布于 2019-04-03 16:03:19
我想你在这里有两个选择:
jest.mock,内联mockClassA和mockMethod,在模拟中公开它们,然后从‘./src/ClassB’导入require。https://stackoverflow.com/questions/55499409
复制相似问题