我正在尝试测试一个通用的fetch函数,它基于服务器响应调用相应的回调函数。 所以,函数看起来有点像这样:
const myFetch = (url, body, onSuccess, onError) => {
let status = 0;
fetch(url, header(body))
.then(response => {
status = response.status;
return response.json();
})
.then(jData => {
switch (status) {
case 200:
case 201:
onSuccess(jData, 'success');
break;
default:
onError([], 'error');
break;
}
})
.catch(() => {
onError([], 'error');
});
};
所以在我的mocha测试中,我试图断言由onSuccess()或onError()回调传递的消息:
it('should perform fetch', function (done) {
this.timeout(5000);
const url = 'http://httpstat.us/201';
const onSuccess = (res, mes) => {
expect(mes).eq('success');
done();
};
const onError = (err, mes) => {
expect(mes).eq('error');
done();
};
Utils.myFetch(url, null, onSuccess, onError);
});
然而,虽然我知道返回201,但我似乎总是进入f {1}}部分,所以我从未真正进入.catch()
回调。
我做错了什么吗?任何帮助都会很棒!
答案 0 :(得分:0)
解决了,这不是真正的摩卡问题:原因是第一个承诺中的return response.json();
,而使用过的服务返回纯文本类型的内容。