Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing Jest测试中的模拟动作函数_Unit Testing_Reactjs_Reactjs Flux_Jestjs - Fatal编程技术网

Unit testing Jest测试中的模拟动作函数

Unit testing Jest测试中的模拟动作函数,unit-testing,reactjs,reactjs-flux,jestjs,Unit Testing,Reactjs,Reactjs Flux,Jestjs,如何从导入的操作模块调用函数?这是我的组件 class Task extends Component { handleClick(e) { e.preventDefault(); Actions.returnTask(this.props.id); } render() {...} } 以及如下所示的测试: jest.dontMock('./Task'); jest.dontMock('./Actions'); describe('Tasks', function() { l

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

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();
  });
});
jest.dontMock('./Task');
开玩笑的dontMock(“/行动”);
描述('Tasks',function()){
让渲染组件;
让我们完成任务;
让我们采取行动;
beforeach(函数(){
RenderComponent=TestUtils.renderIntoDocument(
);
行动=要求(“./行动”);
mockReturnTask=jest.genMockFn();
Actions.returnTask=mockReturnTask;
});
它('should call a returnTask action on Actions',function(){
renderedComponent.handleClick(事件);
expect(mockReturnTask).toBeCalled();
});
});

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

你的例子没有包括
任务的要求,但我很确定这里发生了什么。Jest用户必须知道
需要什么
,以及何时需要什么

按时间顺序:

  • jest设置为从不模拟
    操作
    任务
  • 任务
    组件是必需的,jest实际需要它
  • 操作
    是必需的,因为它在
    任务
    组件中是必需的。开玩笑需要它是真的
  • 任务
    组件已实例化
  • Actions.returnTask
    是猴子补丁,但组件绑定的不是该函数,它是一个仅存在于测试中的新函数
  • 要使用jest Mock函数制作组件,您必须在要求
    任务之前,先要求和monkey patch
    操作

    请注意,如果您在之后立即模拟操作函数,则不必取消对
    操作的修改。这正是jest自动模拟杀戮特性的用途:删除
    jest.dontMock('./Actions')和对
    操作的所有引用
    模块。测试应该是有效的