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')代码>和对操作的所有引用
模块。测试应该是有效的