在我的组件中,我有......
onSubmit = (e) => {
e.preventDefault();
const { history, versionStore } = this.props;
versionStore.add(this.state.formData)
.then(() => history.push('/'));
}
在我的考试中......
it('after successfully submit should redirect to / page', () => {
const spy = jest.spyOn(minProps.history, 'push')
.mockImplementation((path) => {
console.log('called with ', path); // IS CALLED!
});
const wrapper = shallow(<Add.wrappedComponent {...minProps} />);
fetchMock.postOnce('/api/version', { name: 'v1' });
wrapper.setState({ formData: { name: 'v1' } });
wrapper.find('form').simulate('submit', { preventDefault: jest.fn() });
expect(spy).toHaveBeenCalledWith('/');
spy.mockReset();
spy.mockRestore();
});
测试失败,
用/ /调用expect(jest.fn())。toHaveBeenCalledWith(expected)
通过以下方式调用预期的模拟函数:[&#34; /&#34;]
但它没有被召集。
答案 0 :(得分:0)
您的重定向是在异步代码中,并且您正在以同步方式对其进行测试,这意味着当测试执行时,承诺尚未解决。我会用两种方法之一解决这个问题
1 - 测试您的提交函数没有事件,然后您可以在承诺链成功后返回承诺并测试重定向
2 - 模拟versionStore.add是同步的,然后执行它的函数。