我的组件测试文件中有一个这样的模拟模块

  jest.mock('../../../magic/index', () => ({
    navigationEnabled: () => true,
    guidanceEnabled: () => true
  }));

这些函数将在我的组件的渲染函数中调用以隐藏和显示某些特定功能。

我想对这些模拟函数的返回值的不同组合进行快照。

因为假设我有一个这样的测试用例
 it('RowListItem should not render navigation and guidance options', () => {
    const wrapper = shallow(
      <RowListItem type="regularList" {...props} />
    );
    expect(enzymeToJson(wrapper)).toMatchSnapshot();
  });

要运行此测试用例,我想像这样动态地将模拟模块函数的返回值更改为 false
jest.mock('../../../magic/index', () => ({
    navigationEnabled: () => false,
    guidanceEnabled: () => false
  }));

因为我已经导入了 RowListItem 组件一次,所以我的模拟模块不会再次导入。所以它不会改变。我该如何解决这个问题?

最佳答案

您可以模拟该模块,使其返回 spy 并将其导入到您的测试中:

import {navigationEnabled, guidanceEnabled} from '../../../magic/index'

jest.mock('../../../magic/index', () => ({
    navigationEnabled: jest.fn(),
    guidanceEnabled: jest.fn()
}));

然后稍后您可以使用 mockImplementation 更改实际实现
navigationEnabled.mockImplementation(()=> true)
//or
navigationEnabled.mockReturnValueOnce(true);

并在接下来的测试中
navigationEnabled.mockImplementation(()=> false)
//or
navigationEnabled.mockReturnValueOnce(false);

关于reactjs - 如何在每个测试中更改 jest 模拟函数的返回值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45758366/

10-16 14:11
查看更多