【问题标题】:Testing of catching Promise errors捕获 Promise 错误的测试
【发布时间】:2018-01-14 03:50:23
【问题描述】:

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

例如我有这个假代码:

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

对不起,如果这个问题很愚蠢。我只是在学习承诺

【问题讨论】:

    标签: javascript promise jasmine es6-promise jestjs


    【解决方案1】:

    如果您从处理程序中return,它不会拒绝,而是使用返回值进行解析。因此,在您的情况下,您会得到0 的承诺。

    要拒绝错误,throw它。

    【讨论】:

      【解决方案2】:

      第二个测试失败,因为 Promise 没有被拒绝。是那些奇怪的 Javascript 案例之一: undefined + 1 => NaN 没有抛出异常。

      正在使用NaN 解决承诺,并且未调用rejects 断言。如果您继续在测试结果中向上滚动,您可能会看到如下内容:

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

      测试正确,但函数的行为与您的预期不同。 很好的测试!

      【讨论】:

        猜你喜欢
        • 2018-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-21
        • 1970-01-01
        • 2019-04-04
        • 1970-01-01
        • 2018-07-06
        相关资源
        最近更新 更多