我有以下测试:
const mockedObject = {
mockedMethod: jest.fn((someKey, someValue) => {
return {someKey: 'someValue'}
})
};
jest.doMock('../myObject', () => {
return mockedObject;
});
testedObject.testedMethod();
expect(mockedObject.mockedMethod).toHaveBeenCalled();
此处,在testedObject
中,我正在导入myObject
。我想模仿导入并传递mockedObject instead
。
在查看this question和this question之后,我认为上面的代码应该很好,但即使mockedObject.mockedMethod
正在进行调用,也不会调用testedObject
。
那么在这个测试中做的模拟有什么问题?
答案 0 :(得分:1)
你打电话
testedObject.testedMethod()
但期待
mockedObject.mockedMethod)
试试这段代码:
const mockedObject = {
testedMethod: jest.fn((someKey, someValue) => {
return {someKey: 'someValue'}
})
};
jest.doMock('../myObject', () => {
return mockedObject;
});
testedObject.testedMethod();
expect(mockedObject.testedMethod).toHaveBeenCalled();
答案 1 :(得分:0)
我可以想到一些选择。
可能发生的一件事是,在您的测试对象需要它之后,您正在模拟导入,而您无法修改它。如果是这种情况,那么请确保仅在修改了包之后才创建对象的实例。
另一种选择是创建一个文件夹 mocks 并创建一个与您的模块或导入完全相同的文件.js,然后返回您需要的任何内容。这最适用于全局依赖项。
最后,您还可以做的是让您的测试对象接收依赖项作为参数,这样您就可以覆盖文件中的导入。
希望有所帮助