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
不熟悉你的框架,所以不知道如何提供幫助。你不希望嘲笑的反應拋出異常嗎?如果是這樣的話,你在閱讀錯誤信息嗎?你需要定義一個錯誤回調嗎? –