サービスでこの種のメソッドを取得したとしましょう:
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;
}
};