2017-08-06 95 views
0

你能幫我解釋一下如何編寫測試來捕捉錯誤嗎?捕捉承諾錯誤的測試

例如,我有這個假代碼:

export default function someFunc (num) { 
    return someOtherFunc(num).then(resp => { 
     return resp + 1 
    }).catch(() => { 
     return 0 
    }) 
} 

這是以前的代碼玩笑測試。這是成功測試:

test('Should return 3',() => { 
    expect.assertions(1) 
    return expect(someFunc(2)).resolves.toBe(3) 
}) 

我想測試捕捉錯誤,我該怎麼做呢?本次測試將失敗,錯誤「預計一個斷言被調用,但只收到零個說法叫」

test('Should return 3',() => { 
    expect.assertions(1) 
    return expect(someFunc()).rejects.toBe(0) 
}) 

很抱歉,如果這個問題是愚蠢的。我只是學習承諾

回答

0

如果您return從處理程序,它不拒絕,但與返回值解析。所以在你的情況下,你得到的承諾是0

要拒絕併發生錯誤,請使用throw它。

0

第二個測試失敗,因爲Promise未被拒絕。是Javascript的這些好奇的案例之一: undefined + 1 => NaN 沒有例外被拋出。

該承諾正在與NaN解決,rejects斷言不叫。如果繼續在測試結果向上滾動,你可以看到:

Expected received Promise to reject, instead it resolved to value 
    NaN 

測試是正確的,但正如你所期望的功能不行爲。 一個很好的測試!