Есть ли способ вернуть 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;
});
Я пытаюсь изменить не код контроллера; Я хочу, чтобы цепочка success
и error
продолжала работать, когда в моем "isInTestMode".
Можно ли подделать HttpPromise
так, как я описал в сервисе?
Ниже приведено пересмотренное издание "MyService" выше (фрагмент), содержащий success
и error
на объекте обещания. Но как мне выполнить метод success
?
return {
get : function(itemId) {
if (isInTestingMode) {
var promise = $.defer().promise;
// Mimicking $http.get success
promise.success = function(fn) {
promise.then(function() {
fn({ itemId : "123", name : "ItemName"}, 200, {}, {});
});
return promise;
};
// Mimicking $http.get error
promise.error = function(fn) {
promise.then(null, function(response) {
fn("Error", 404, {}, {});
});
return promise;
};
return promise;
}
return $http.get("/myapp/items/" + itemId);
}
}