I'm单元未处理的承诺拒绝测试一个Express功能是这样的:测试ASYN调用抛出节点JS
function(request,response,someDependency){
...
someDependency.doStuff(arg1,arg2)
.then(function(someResponse){
response.status(200).send({body: someResponse});
})
.catch(function(error){
response.status(500).send({someResponse: 'error');
});
}
在我的单元测试(采用摩卡),我决定模仿我的反应,使用断言里面,还嘲笑我的依赖性:
我mockedResponse的抽象:
...
exports.expectedStatus = function(status){
this.expectedCode = status;
}
exports.status = function(realStatus){
this.expectdCode = realStatus;
return this;
}
exports.send = function(body){
assert.strictEqual(this.realStatus,this.expectedCode);
}
和我的依赖性的抽象是:
exports.setPromiseError(error){
this.error = error;
};
exports.doStuff(arg1,arg2){
return new Promise(function (resolve, reject){
if (!error)
resolve({this: 'is', a: 'response'});
else
reject(error);
}});
在我的单元测试我有这样一个测试:
mockedResponse = require('./fake/assertiveResponse.js');
mockedDependency = require('./fake/dependency.js');
it('should throw error',function(){
mockedDependency.setPromiseError(new Error('sorry, not today');
myLibUnderTest.myFunctionUnderTest(someFakeRequest,
mockedResponse.get()
.expectedStatus(200), <--I´m forcing a failing test here!
mockedDependency);
});
但是......我断言似乎是swalled由承诺,我得到一个测试通过与此控制台输出:
(node:1512) UnhandledPromiseRejectionWarning: Unhandled promise rejection
(rejection id: 2): AssertionError: 500 === 200
现在我甚至不确定我是否使用Promise正确的方式...任何帮助表示赞赏。
感谢您的回复Garret。但我认为这个问题会持续使用你的方法。我的理解是,在我嘲笑的回应中,我的断言抛出了一个例外,因此既不满足也不拒绝承诺...... – Felipe
不熟悉你的框架,所以不知道如何提供帮助。你不希望嘲笑的反应抛出异常吗?如果是这样的话,你在阅读错误信息吗?你需要定义一个错误回调吗? –