への呼び出しを模倣するために HttpPromise (または同様のもの) を返す方法はあり$http
ますか? 本物の HTTP リクエストが行われたかどうか、または偽の HttpPromise オブジェクトが偽のデータで返されたかどうかを示すグローバル変数を設定したいと考えています。
たとえば、次のようなサービスがあります。
angular
.module('myservice')
.factory('MyService', ['$http', function($http) {
return {
get : function(itemId) {
if (isInTestingMode) {
// return a promise obj that returns success and fake data
}
return $http.get("/myapp/items/" + itemId);
}
};
} ]);
そして、私のコントローラーには、次のような前述のサービスへの呼び出しがあります。
// Somewhere in my controller
MyService.get($scope.itemId)
.success(function(data) {
$scope.item = data;
})
.error(function(data, status, headers, config) {
$scope.notFound = true;
});
コントローラーのコードを変更しないようにしています。「 isInTestMode 」の場合でもチェーンが機能するようにしますsuccess
。error
サービスで説明した方法で偽造することはできHttpPromise
ますか?
以下は、上記の「MyService」(スニペット) の改訂版で、promise オブジェクトにsuccess
andが含まれています。error
しかし、どうすればsuccess
メソッドを実行できますか?
return {
get : function(itemId) {
if (isInTestingMode) {
var promise = $.defer().promise;
// Mimicking $http.get's success
promise.success = function(fn) {
promise.then(function() {
fn({ itemId : "123", name : "ItemName"}, 200, {}, {});
});
return promise;
};
// Mimicking $http.get's error
promise.error = function(fn) {
promise.then(null, function(response) {
fn("Error", 404, {}, {});
});
return promise;
};
return promise;
}
return $http.get("/myapp/items/" + itemId);
}
}