如何在 Jest 中有效地模拟函数?

问题描述 投票:0回答:1

我希望到目前为止你新年快乐。

我有一个 React 项目——只有 JavaScript,没有 TypeScript——我正在尝试用 Jest 进行测试。

我有文件 A,它引用文件 B,而文件 B 又使用模块“@D/E”中的函数 C,该函数 C 访问并返回我想要模拟的数据。

我尝试使用文档中描述的模拟方法,以及我在 S.O. 上找到的方法。似乎没有一个起作用。例如:

在“testFile.test.js”中(为了简化,排除无关材料):

import A from './A';

jest.mock('@D/E', () => ({
    C: jest.fn(() => ({
        field1: {},
        field2: [1, 2, 3]
    }))
}));

test("test name", () => {
    render(<A />);
});

在“A.js”中:

const A = () => {
    return <B />;
}

export default A;

在“B.js”中:

import C from '@D/E';

const B = () => {
    const f = C();
    // Do thing with 'f'
}

export default B;

当我运行测试或通过调试器时,我得到“Uncaught [TypeError: (0 , _e.C) is not a function]”。

我期望的是

C()
返回
{ field1: {}, field2: [1, 2, 3] }
而不是引发异常。

其他建议似乎产生了类似的结果,就像我在过去三天搜索互联网时找到的所有其他可能的解决方案一样。谁能指出我的信息方向以找到可行的方法?

提前致谢。

javascript testing jestjs mocking
1个回答
0
投票

@D/E
模块使用默认导出。所以你应该像下面这样模拟
@D/E
模块和
C

jest.mock('@D/E', () =>
  jest.fn(() => ({
    field1: {},
    field2: [1, 2, 3],
  })),
);

© www.soinside.com 2019 - 2024. All rights reserved.