假设我在服务上得到了这种方法:
this.search = function (term) {
var deferred = $q.defer();
Restangular.all('search').getList(params)
.then(_onRestResult.bind(this, deferred))
.catch(_onRestError.bind(this, deferred));
return deferred.promise;
}
function _onRestResult(deferred, data) { // notice it isn't on the this
//doSomthing
}
但是运行一个基本的测试。
当我将then
子句更改为匿名函数时,一切都按预期工作,但是当我使用命名的私有函数时,我得到: 业力打印:
TypeError: 'undefined' 不是函数(评估 '_onRestResult.bind(this,deferred)')
我知道这种答案
但它们指的是控制器而不是服务 (:)) 并建议不要使用私有方法,但我们真的更喜欢使用它们。
我也遇到了这个答案,暗示私有方法已经过隐式测试,这就是我的想法,直到我遇到这个错误消息。
谢谢您的帮助!
编辑:我应该注意到我像这样嘲笑 Restangular(如果这是相关的):
mockRestangular = {
one:function(){
return this;
},
getList:function(calls){
answer ={results:['1','2']}
var deferred = $q.defer();
deferred.resolve(answer);
return deferred.promise;
},
post:function(called){
answer = 'posted: '+called;
var deferred = $q.defer();
deferred.resolve(answer);
return deferred.promise;
},
get: function(called){
answer = this;
var deferred = $q.defer();
deferred.resolve(answer);
return deferred.promise;
},
all:function(){
return this;
}
};