Comment se moquer d'un appel http $ angulaire et retourner un objet promesse qui se comporte comme $ http

Est-il un moyen de retourner un HttpPromise (ou quelque chose de similaire) pour simuler un appel à $http? Je veux définir une variable qui indique si le réel de la requête HTTP est fait ou si un faux HttpPromise objet est retourné avec de fausses données.

Par exemple, j'ai un service qui est similaire à ceci:

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);
       }
    };
 } ]);

Et dans mon contrôleur, j'ai un appel à ce service qui ressemble à ceci:

        //Somewhere in my controller

        MyService.get($scope.itemId)
           .success(function(data) {
              $scope.item = data;
           })
           .error(function(data, status, headers, config) {
              $scope.notFound = true;
           });

Je suis en train de pas modifier le code du contrôleur, je veux le success et error le chaînage de continuer à travailler alors que dans mon "isInTestMode".
Est-il possible de simuler une HttpPromise dans la façon que j'ai décrite dans le service?


Ci-dessous est une édition révisée de la "MyService" ci-dessus (un extrait) contenant un success et error sur la promesse de l'objet. Mais, comment dois-je exécuter l' success méthode?

        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);
           }
        }

source d'informationauteur whyceewhite