Jest测试中的Mock Action函数



如何从导入的操作模块中调用函数?这是我的组件

class Task extends Component {
 handleClick(e) {
  e.preventDefault();
  Actions.returnTask(this.props.id);
 }
 render() {...}
}

以及看起来像这样的测试:

jest.dontMock('./Task');
jest.dontMock('./Actions');
describe('Tasks', function() {
 let renderedComponent;
 let mockReturnTask;
 let TaskActions;
 beforeEach(function() {
  renderedComponent = TestUtils.renderIntoDocument(
   <Task task={testTask} key={1} />
    );
   Actions = require('./Actions');
   mockReturnTask = jest.genMockFn();
   Actions.returnTask = mockReturnTask;
  });
  it('should call a returnTask action on Actions', function() {
   renderedComponent.handleClick(event);
   expect(mockReturnTask).toBeCalled();
  });
});

当运行我的测试时,它告诉我函数没有被调用。如果我执行expect(Actions.returnTask).toBeCalled();,我会收到一条toBeCalledWith() should be used on a mock function错误的错误消息。如何模拟外部Actions上的函数,并检查它是否在测试中被调用?我觉得我上面的方法应该有效。

您的示例不包括对Task的要求,但我非常确定这里发生了什么。Jest用户必须知道他们在require上做什么以及什么时候做。

按时间顺序排列:

  1. jest设置为从不模拟ActionsTask
  2. Task组件是必需的,jest要求它是真实的
  3. CCD_ 8是必需的,因为它在CCD_。玩笑需要它是真实的
  4. Task组件实例化
  5. Actions.returnTask是猴子补丁,但它不是组件绑定的函数,它是一个只存在于测试中的新函数

要使您的组件使用笑话模拟函数,您必须在需要Tasks 之前,先需要并monkey补丁Actions

请注意,如果您稍后模拟Actions的函数,则不必取消锁定Actions。这正是小丑自动嘲讽杀人功能的目的:删除jest.dontMock('./Actions');和对Actions模块的所有引用。测试应该是有效的。

相关内容

  • 没有找到相关文章

最新更新