【发布时间】:2015-11-04 09:04:53
【问题描述】:
我正在使用 angularjs 1.4 和 jasmine 2.4。
我试图测试一个函数,我想让它返回一个承诺,所以它上面的另一层可以处理可能的值。
我的问题是函数首先验证输入。如果他们不是正确的,我想返回一个被拒绝的承诺。 否则它将做它必须做的任何事情并履行承诺。
以下是相关 emailSvc 函数的一部分:
// Function found in the emailSvc
this.sendEmail = function sendEmail(apiKey, token, email_type)
{
// Prerequisite to send email
if(!apiKey) {
return $q.when("apiKey not present.");
}
var deferred = $q.defer();
// Ajax call
serviceApiEmail.send(apiKey, token, email_type)
.then(function(data){
deferred.resolve(data);
})
.catch(function(e){
deferred.reject(e);
})
return deferred.promise;
}
我的测试用例如下:
it('should reject sending email if apiKey is not present', function(){
var rejectEmail;
var apiKey,
verifyToken = acceptedVerifyToken,
emailType = const_EMAIL_TYPE.SIGNUP;
i_emailSvc.sendEmail(apiKey, verifyToken, emailType)
.then(function(){
// It should not come here
rejectEmail = false;
}).catch(function(){
rejectEmail = true;
});
// It comes here without executing any success or fail promise handlers
expect(rejectEmail).toBe(true);
});
问题在于当拒绝承诺时,catch 永远不会被执行。我相信这是我对承诺的误解。
任何想法为什么捕获然后在这里不起作用?
【问题讨论】: