测试捕获Promise错误

时间:2017-08-06 21:18:56

标签: javascript promise jasmine es6-promise jestjs

你能帮我解释如何编写捕获错误的测试吗?

例如我有这个假代码:

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

很抱歉,如果这个问题很愚蠢。我只是在学习承诺

2 个答案:

答案 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

测试是正确的,但功能不符合您的预期。 一个很好的测试!