Я пытаюсь проверить, что в случае сбоя вызова API, часть .catch
или мое обещание отправят действие.
Ниже приведен код, который я пытаюсь проверить:
const handleSubmit = () => {
const file = attachment.current.files[0];
let brcidListToSend;
if (includeAllBrcids) {
console.log('here');
brcidListToSend = List([]);
} else {
brcidListToSend = brcidList;
}
request
.post('/api/emailclinician/createEmail')
.field('to', to)
.field('subject', subjectName)
.field('message', message)
.field('brcidList', brcidListToSend.toJS())
.attach('attachment', file)
.then(res => {
setEmailSent(true);
dispatch(updateButtonStatus('finished'));
})
.catch(err => {
dispatch(updateButtonStatus('failed'));
setEmailSent(false);
});
};
и вот мой тест:
it('Dispatches "updateButtonStatus" and calls "handleSubmit" but handles fail', async () => {
sinon.stub(request, 'post').returns({
field() {
return ({
field() {
return ({
field() {
return ({
field() {
return ({
attach() {
return new Promise((resolve, reject) => {
reject({
status: 404
})
})
}
})
}
})
}
})
}
})
}
});
const expectedResult = [
{
type: constants.EMAIL_CLINICIAN.UPDATE_BUTTON_STATUS,
payload: {
status: 'started'
}
},
{
type: constants.EMAIL_CLINICIAN.UPDATE_BUTTON_STATUS,
payload: {
status: 'failed'
}
}
];
const wrapper = await mount(<Provider store={fakeStore}> <CreateEmail/> </Provider>);
wrapper.find('[data-ut="submit-button"]').simulate('submit');
wrapper.update();
expect(fakeStore.getActions()).to.deep.equal(expectedResult);
});
Я протестировал деталь .then
и мои тесты прошли.
Я предполагаю, что это как-то связано с тем, что мой тест заканчивается, прежде чем мой .catch
успеет закончить sh.
Есть предложения? Спасибо