2017-08-25 80 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();,而使用的服務返回了純文本類型的內容。

相關問題