Javascript 开玩笑地嘲弄一个重要人物

Javascript 开玩笑地嘲弄一个重要人物,javascript,jestjs,Javascript,Jestjs,我有以下测试: const mockedObject = { mockedMethod: jest.fn((someKey, someValue) => { return {someKey: 'someValue'} }) }; jest.doMock('../myObject', () => { return mockedObject; }); testedObject.testedMethod(); expect(mockedObje

我有以下测试:

const mockedObject = {
    mockedMethod: jest.fn((someKey, someValue) => {
        return {someKey: 'someValue'}
    })
};

jest.doMock('../myObject', () => {
    return mockedObject;
});


testedObject.testedMethod();
expect(mockedObject.mockedMethod).toHaveBeenCalled();
这里,在
testedObject
中,我正在导入
myObject
。我想模拟该导入并传递
mockedObject,而不是

在查看和之后,我认为上面的代码应该很好,但是
mockedObject.mockedMethod
从未被调用,即使
testedbject
正在进行调用

那么,在这个测试中进行模拟有什么问题吗?

您调用

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();

我能想出一些选择

可能发生的一件事是,在您的测试对象需要导入之后,您正在模拟导入,并且您无法修改它。如果这是您的情况,那么请确保仅在修改包之后才创建对象的实例

另一个选项是创建一个文件夹mocks,创建一个名为.js的文件,就像您的模块或导入一样,然后返回您需要的任何内容。这最适用于全局依赖项

最后,您还可以做的是使您的测试对象接收作为参数的依赖关系,以便您可以覆盖文件内的导入

希望能有帮助