有没有办法返回一个 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
anderror
链接在我的“isInTestMode”中仍然有效。是否可以按照我在服务中描述的方式伪造HttpPromise
?
下面是上面的“MyService”(一个片段)的修订版,其中包含一个success
和error
在 promise 对象上。但是,我该如何执行该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);
}
}