2014-03-13 2 views
14

get 요청을 실행하는 공장이 있으므로 시험하고 싶습니다. 불행히도 카르마 테스트는 $ httpBackend에 정의 된 응답이 없다는 것을 알려줍니다.AngularJS 재스민 테스트 요청 받기

AngularJS와 1.2.14, 재스민 2.0, 카르마 0.12.0

여기에 내가 원하는 내 모듈의 테스트에 :

describe('Module-Test', function() { 

    beforeEach(module('appFactory')); 

    it('should call $http.get in getList', inject(function (boxListService, $httpBackend){ 
     $httpBackend.expectGET('/boxlist'); 
     boxListService.getList(); 
     $httpBackend.flush(); 
     })); 
}); 
:

var appFactory = angular.module('appFactory', []); 

appFactory.factory('boxListService', function($http){ 
    return{ 
     getList: function(){ 
      return $http.get('/boxlist').then(function(result){ 
       return result.data; 
      }); 
     } 
    }; 
}); 

내 시험이있다

메시지 :

Error: No response defined ! 
at $httpBackend (D:/nodeJS/host/test_app/src/public/js/libs/angular/angular-mock.js:1206:13) 

답변

25

예상 응답과 예상 요청을 정의해야합니다. 다음 형식을 갖습니다.

$httpBackend.expectGET('/boxlist').respond(HTTP_STATUS_CODE, EXPECTED_RESPONSE); 

HTTP_STATUS_CODE는 정수입니다. EXPECTED_RESPONSE는 반환되는 값입니다 (종종 Object Literal입니다).

하나만 정의 할 수 있습니다.

자세한 내용은 ngMock httpBackend 설명서를 참조하십시오.

+4

나는 응답이 expectGET에 선언되어야한다는 것을 깨닫기 전에 이것을 약 5 번 보았다. 나는 whenGET이 응답을 선언하는 것이 필요한 유일한 곳이라는 인상을 받고있었습니다. whenGET과 expectGET 둘 다에 응답을 선언해야한다고 말하는 것이 안전합니까? – binarygiant

1

질문의 정확한 경우는 아니지만 그것이 도움이되고 나에게 일어났기 때문에.

$httpBackend.whenGET(myService.serviceURL).respond(myMock); 
$httpBackend.expectGET(myService.serviceURL); 

서비스를 호출 할 때 내가 응답 무엇을 정의하고 싶었 expect과 내가 메소드가 호출 된 것을 확인하고 싶어서 when으로 : 나는이 두 줄을했다.

이것은 작동하지 않지만 (때로는 그렇지만 왜 그런지는 모르겠지만). 어떻게 든 expectwhen를 오버라이드 (override) 추측 때문에 나는이 솔루션은 when 절을 제거하고 프레임 워크가 그런 식으로 행동 이유를 모르겠어요 respond()

$httpBackend.expectGET(myService.serviceURL).respond(myMock); 

expect에 추가했다

Error: No response defined !

얻었다. 만약 누군가가 당신이 대답을 향상시키기 위해 여기에 설명하는 것이 좋다면