Javascript 模拟不';不起作用,而重新分配则起作用
我有以下Jest/酶测试: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} /> );
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);
}