unit testing - How do I test an $httpBackend POST error state with AngularJS / Karma? -


i'm trying write unit test angular service , here's function in service:

login = function(authobject) {   deferred = $q.defer();    $http({     url: '/api/v1/session/create',     method: 'post',     data: authobject   }).success(function(response) {     var user;     if (response.status === 'ok' && response.user && response.authenticated === true) {       user = response.user;     }     return deferred.resolve(response);   }).error(function(data) {     deferred.reject(data);     return $state.go('api_error');   });   return deferred.promise; }; 

i can test success case like:

it('should go api error state', function() {   var authobject;   authobject = {     username: 'a@b.com',     password: 'c'   };   $httpbackend.expectpost('/api/v1/session/create').respond(somedata);    userservice.login(authobject).then(function(response) {     return console.log("not error", response);   }, function(response) {     return console.log("error", response);   });   return expect($state.go).tohavebeencalledwith('api_error'); }); 

that works fine, if do: $httpbackend.expectpost('/api/v1/session/create').respond(500, 'error');, error case doesn't called. doing wrong?

in order .then() error callback called, previous promise in chain should result in error (e.g. throw exception) or rejected.

returning 500 cause error callback in login() method called, since callback neither throws error nor gets rejected, chained error callback won't called.

e.g. changing:

}).error(function(data) {     deferred.reject(data);     return $state.go('api_error'); }); 

to:

}).error(function(data) {     return deferred.reject(data);     //return $state.go('api_error'); }); 

would work (but doesn't want :d).


i not familiar ui-router, in case possible $state.go() aborts current execution chain, not sure following work:

}).error(function(data) {     $state.go('api_error');     return deferred.reject(data); }); 

Comments

Popular posts from this blog

javascript - RequestAnimationFrame not working when exiting fullscreen switching space on Safari -

c# - How do I get the Nth largest element from a list with duplicates, using LINQ? -

jsp - "Sending a redirect is forbidden after the response has been committed" in sendRedirect -