2017-08-25 87 views
0

我想测试一个基于服务器响应调用各自回调函数的通用读取函数。 因此,功能看起来有点像这样:摩卡测试异步函数总是以.catch结尾()

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'); 
    }); 
}; 

所以在我的摩卡测试我想断言是的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回来了,但我似乎总是进入.catch()部分取回,所以我从来没有真正进入onSuccess回调。

有什么我做错了吗?将是伟大的任何帮助!

回答

0

解决了,它并不是一个真正的摩卡问题:原因是第一个承诺中的return response.json();,而使用的服务返回了纯文本类型的内容。