2014-06-09 1 views
2

나는 각도 컨트롤러의 일부 코드가 있습니다.각 자원 약속 잡기, 자스민 toThrow()

expect(function(){ 
    scope.login(); 
}).toThrow(); 

그러나이 오류가 발생합니다 : : 예외를 던질

예상 기능을 나는 그것이 오류가 발생하거나하지 자스민과과 같이 있는지 여부를 테스트하기 위해 노력하고있어

$scope.credentials = { 
     username:"", 
     password:"", 
     rememberMe:false 
    }; 

var currentUser = {}; 

$scope.login = function(callback){ 
     user.get($scope.credentials) 
      .$promise 
      .then(function(user){ 
       $scope.currentUser = user; 
       return cb ? cb(user) : user; 
      }) 
      .catch(function(res){ 
       throw "LoginError"; 
      }); 

}; 

.

예상대로 작동하는 약속의 수락 테스트를 마쳤습니다.하지만 처리 할 수없는 비동기식 부분이 있다고 가정합니다.

나는 또한 전달 전화를 시도하고 done() 호출하지만 그 중 하나를 작동하지 않았다.

편집 : 내 다른 검사 작업, 나는 서버 (200)를 반환하고 사용자와 모든 작품을 다른 시나리오를 시도 할

beforeEach(inject(function($rootScope,$controller,_$httpBackend_){ 



      $httpBackend = _$httpBackend_; 
      successCallback = jasmine.createSpy(); 
      errorCallback = jasmine.createSpy(); 


      scope = $rootScope.$new(); 
      controller = $controller('LoginController',{ 
       '$scope':scope 
      }); 

     })); 

afterEach(function(){ 
      $httpBackend.verifyNoOutstandingExpectation(); 
      $httpBackend.verifyNoOutstandingRequest(); 
     }); 

참고 : 내가 지금처럼 내 백엔드을 조롱하고

. 나는 특별히 $ scope.login()이 서버 에러를 받았을 때 에러를 던질지를 테스트하고있다.

답변

6

자원의 응답을 조롱하기 위해 $ httpBackend를 설정해야합니다. 그런 다음 결과를 플러시하여 해결 시점을 제어해야합니다.

나는 당신을 위해 간단한 시나리오를 작성했습니다.

http://plnkr.co/edit/lnWaS1lyJja56Zh1STyl?p=preview

관련 사양 파일. 한눈에 http://embed.plnkr.co/lnWaS1lyJja56Zh1STyl/appSpec.js

발췌문 :

$httpBackend.expectGET('/api/index.php/user') 
       .respond(500, 'error'); 
//Initiate request by calling your api/resource 
$httpBackend.flush();