Javascript 模拟不';不起作用,而重新分配则起作用

Javascript 模拟不';不起作用,而重新分配则起作用,javascript,reactjs,react-native,enzyme,jestjs,Javascript,Reactjs,React Native,Enzyme,Jestjs,我有以下Jest/酶测试: const mockCheckMyFunctionality = jest.fn(); jest.mock('../modules/MyFunctionality', () => ({ checkMyFunctionality: mockCheckMyFunctionality })); const wrapper = shallow( <App initialProps={mockInitialProps} /> );

我有以下Jest/酶测试:

 const mockCheckMyFunctionality = jest.fn();
 jest.mock('../modules/MyFunctionality', () => ({
    checkMyFunctionality: mockCheckMyFunctionality
 }));
 const wrapper = shallow(
    <App initialProps={mockInitialProps} />
 );
 expect(mockCheckMyFunctionality).toHaveBeenCalledTimes(1);
与:

测试将通过,显示实际调用了
mockCheckMyFunctionality
。然而,这是一个黑客行为,无法通过EsLint检查

我正在测试的方法就是:

setupMyFunctionality() {
    checkMyFunctionality(this.props.something);
}
如何修改模拟,使其在
应用程序中可见


重新分配似乎有效,但模拟无效。

可能您忘记了为
myfunctionality
模块创建手动模拟。
与模拟模块的中一样:

手动模拟是通过在
\uuuuu mock\uuu/
紧邻模块的子目录。例如,要模拟
models
目录中名为
user
的模块,请创建一个名为
user.js
的文件,并将其放入
models/\uuuuuuuuu mocks
目录中。

当给定模块存在手动模拟时,Jest的模块系统将在显式调用
Jest.mock('moduleName')
时使用该模块

如果是这种情况,您可以在
MyFunctionality
文件旁边创建一个名为
\uuumocks\uuuu
的文件夹,然后在该文件夹中创建一个
MyFunctionality
文件,其中包含代码段中的模拟实现,并通过调用
jest.mock(“../modules/MyFunctionality”)显式调用模拟
在测试之前


我在项目中开始使用的另一个解决方案是将依赖项作为道具传递给组件。要实现这一点,您可以更改
App
组件,并通过
MyFunctionality
作为道具,因此在上述测试中,您只需通过作为道具实现的mock,避免创建
\uumocks\uuuuu/
文件夹来完成测试。

异步
jest.mock()
可能存在问题?当您创建
包装器时,回调尚未运行。我不这么认为。我在调用
jest.mock
后8秒钟调用了一个sleep函数,测试仍然失败。不过这个建议很有趣。
 MyFunctionality.checkMyFunctionality = mockCheckMyFunctionality;
setupMyFunctionality() {
    checkMyFunctionality(this.props.something);
}