2016-09-14 5 views
0

데이터를 반환하는 REST URL을 호출하는 서비스가 있습니다.

내 샘플 코드는

$http('POST', '/mockUrl/resource/'+resourceValue).then(...); 

내 서비스가 잘 작동하고 데이터를 반환 할 것이다. 제 문제는 업장에서 이것을 어떻게 테스트해야합니까? 지금 당장 나는 다른 resourceValue를 호출하여 mockUrl이 호출되는지 테스트합니다. stackoverflow에 오기 전에 각 테스트에서 예상 URL을 사용하여 $ httpBackend를 정의했습니다.

예 :

it('testing for status 200', function(){ 
     $httpBackend.when('POST', '/mockUrl/resource/'+1234) 
      .respond(function (method, url, data, headers) { 
       return [200, data1]; 
      }); 

     MyService.serviceMethod(1234).then(function(){ 
     //test the returned data 
     }); 
    }); 

it('testing for status 201', function(){ 
    $httpBackend.when('POST', '/mockUrl/resource/'+4567) 
     .respond(function (method, url, data, headers) { 
      return [201, data2]; 
      }); 

    MyService.serviceMethod(1234).then(function(){ 
     //test the returned data 
    }); 
}); 

내가 위의 방식으로 내 카르마 테스트를 작성되어서는 안된다는 이야기하고 있어요. 그러나 나는 그것을 피하는 방법을 모르겠습니다.

나는

$httpBackend.when('POST',url) 
     .respond(function (method, url, data, headers) { 
     return data[option]; 
     }); 

을 시도하지만이 'URL'은 결코 어떤 시험에 호출되지됩니다. 나는 더 진행하는 방법을 모르겠습니다.

+0

들여 쓰기 코드 – Hitmands

+0

붙여 넣기를 고려하십시오. – manu

답변

0

당신이 비동기 작업을 시뮬레이션 할 필요가 $httpBackend.flush();를 호출하지 ... 게다가, 당신은 또한 아마 당신이에서의 깊이보기 더있을 필요가

afterEach(() => { 
    $httpBackend.verifyNoOutstandingExpectation(); 
    $httpBackend.verifyNoOutstandingRequest(); 
}); 

사용하지 않을 것 같다 https://docs.angularjs.org/api/ngMock/service/ $ httpBackend

+0

실제로는 $ httpBackBack.flush()를 호출하고 $ httpBackend.verifyNoOutstandingExpectation()을 확인하십시오. $ httpBackend.verifyNoOutstandingRequest(); 모든 전화 후에. 내 문제는 다른 상태 (다른 4 가지 상태가 있음)에 대해 다른 응답을 반환해야한다는 것입니다. 1 개의 httpBackend에서 다른 URL을 호출하고 여전히 내 유스 케이스를 수행하는 것이 가능합니다. – manu