我如何测试一个承诺捕获块-从回调中引发错误

时间:2018-08-21 08:18:05

标签: node.js jasmine

在节点6中,有没有办法使用例如茉莉花的允诺捕获块进行测试:

try{

    Promise.resolve(someFunction()).then(response => {
        callback(response);
    }).catch(err => {
       //never here
    });
} catch (err => {
  //always getting to here
}

测试看起来像这样。

sandbox.stub(js, 'someFunction').callsFake(() => {console.log ('calling fake method'); throw new Error('uh no!')});

是否要测试如果在Promise中捕获了错误,该catch块会捕获从somefunction到调用回调的所有错误吗?我该如何测试呢?

T.I.A

1 个答案:

答案 0 :(得分:0)

仅测试您的someFunction抛出错误的情况。

对于顺序的诺言调用,捕获将捕获任何拒绝的诺言

这是一个示例:

const divideByZero = function(num,den){
    return new Promise((resolve,reject)=>{
        if(den == 0){
            reject('can not divide by zero !!');
        }
        else{
           resolve(num/den);
        }
    });
}

divideByZero(2,0)
.then((res)=>{
    console.log(res);
})
.catch((err)=>{
    console.log('Reject catched');
    console.log(err)
});

Promise.resolve(divideByZero(2,0)).catch((err)=>{
    console.log('Reject catched');
    console.log(err)
})

divideByZero(2,0)
.then((res)=>{
    console.log(res);
})
.catch((err)=>{
    console.log('Reject catched');
    console.log(err)
})