我最近从1.5更新到1.6.3并且使用$ q服务使用deferred promise对象的代码,现在我的单元测试运行中出现以下错误:
Possibly unhandled rejection: undefined thrown
以下是我在代码中使用延迟保证的函数的典型结构:
public someFunction = () => {
const deferred = this.$q.defer();
if (someConditionIsTrue) {
this.myService.getThings().then((response) => {
deferred.resolve(response);
});
} else {
deferred.reject();
}
return deferred.promise;
};
当单元测试else条件时,我会抛出此错误(使用karma \ jasmine \ phantomJS)
我已经配置了以下内容:
config(['$qProvider', ($qProvider) => {
$qProvider.errorOnUnhandledRejections(false);
}])
有人能指出我正确的方向吗?
由于
答案 0 :(得分:0)
Angular建议你处理承诺的每一条可能路线。
目前您缺少此部分:
public someFunction = () => {
const deferred = this.$q.defer();
if (someConditionIsTrue) {
this.myService.getThings().then((response) => {
deferred.resolve(response);
});
// what happen if this promise is rejected?
} else {
deferred.reject();
}
return deferred.promise;
};
虽然您可以在评论部分添加.catch
,但我建议您更改整个结构,以获得更清晰的代码并更轻松地进行维护:
public someFunction = () => {
if (someConditionIsTrue) {
return this.myService.getThings();
// this will pass back whatever resolve/reject to upper layer
} else {
return $q.reject();
}
};