Jest 测试中的 Mock Action 函数
Mock Action functions in Jest test
如何从导入的动作模块调用函数?这是我的组件
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
他们做什么,什么时候做。
按时间顺序:
- jest 设置为从不模拟
Actions
和 Task
Task
组件是必需的,jest 需要它是真实的
Actions
是必需的,因为它在 Task
组件中是必需的。开玩笑需要它是真实的。
Task
组件被实例化
Actions.returnTask
是 monkey-patched 但它不是组件绑定的功能,它是一个仅存在于测试中的新功能。
要让你的组件使用一个开玩笑的模拟函数,你必须 require 和 monkey-patch Actions
before require Tasks
请注意,如果您随后模拟了 Actions 的功能,则不必取消模拟 Actions
。这正是 jest auto-mocking killing feature 的用途:删除 jest.dontMock('./Actions');
和所有对 Actions
模块的引用。测试应该有效。
如何从导入的动作模块调用函数?这是我的组件
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
他们做什么,什么时候做。
按时间顺序:
- jest 设置为从不模拟
Actions
和Task
Task
组件是必需的,jest 需要它是真实的Actions
是必需的,因为它在Task
组件中是必需的。开玩笑需要它是真实的。Task
组件被实例化Actions.returnTask
是 monkey-patched 但它不是组件绑定的功能,它是一个仅存在于测试中的新功能。
要让你的组件使用一个开玩笑的模拟函数,你必须 require 和 monkey-patch Actions
before require Tasks
请注意,如果您随后模拟了 Actions 的功能,则不必取消模拟 Actions
。这正是 jest auto-mocking killing feature 的用途:删除 jest.dontMock('./Actions');
和所有对 Actions
模块的引用。测试应该有效。