你能帮我解释如何编写捕获错误的测试吗?
例如我有这个假代码:
export default function someFunc (num) {
return someOtherFunc(num).then(resp => {
return resp + 1
}).catch(() => {
return 0
})
}
这是对前一代码的Jest测试。这是成功的测试:
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 :(得分:0)
如果来自处理程序的return
,则它不会拒绝但会使用返回值进行解析。因此,在您的情况下,您将获得履行0
的承诺。
要拒绝错误,请throw
。
答案 1 :(得分:0)
第二次测试失败,因为Promise没有被拒绝。是Javascript的奇怪案例之一:
undefined + 1 => NaN
没有例外被抛出。
使用NaN
解决了承诺,并且未调用rejects
断言。如果继续向上滚动测试结果,您可能会看到如下内容:
Expected received Promise to reject, instead it resolved to value
NaN
测试是正确的,但功能不符合您的预期。 一个很好的测试!