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 -

jsf - How to ajax update an item in the footer of a PrimeFaces dataTable? -

django - CSRF verification failed. Request aborted. CSRF cookie not set -