【发布时间】:2018-09-08 22:10:38
【问题描述】:
我想监视一个函数来测试当一个 promise 被拒绝时这个函数是否在一个 catch 块中被调用。我的代码是这样的反应组件
export class ResetPassword extends Component {
handleSubmit = e => {
e.preventDefault();
this.props
.resetPassword()
.then(() => {
this.props.history.push(LOGIN_PATH);
})
.catch(({ error }) => {
this.props.displayErrorAlert('impossible to change password. You should ask for a new reset password link',6000);
});
};
}
这里我想测试一下函数displayErrorAlert是否被调用了。我做了这个测试
it('validate form', () => {
const resetPassword = () => {
return Promise.reject({
error: {
response: {
data: {
errors: [
{
title: 'foo',
},
],
},
},
},
});
};
const displaySpy = sinon.spy();
const wrapper = mount(
<ResetPassword
history={{}}
resetPassword={resetPassword}
displayErrorAlert={displaySpy}
/>
);
wrapper.instance().handleSubmit({
preventDefault: () => {},
});
expect(displaySpy.calledOnce).toEqual(true);
});
间谍被调用,但当然是异步的,所以我的测试总是失败。我想找到一种方法来测试函数是否仅在调用 catch 块后才被调用,但我不知道该怎么做。
【问题讨论】:
标签: javascript reactjs promise jestjs sinon