2016-09-14 5 views
0

У меня есть служба, которая вызывает URL REST, который возвращает данные.

Мой пример кода будет

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

Моя служба отлично работает и возвращает данные. Моя проблема заключается в том, как проверить это в карме. Прямо сейчас у меня есть другой ресурс, который нужно проверить для вызова mockUrl. Прежде чем перейти к stackoverflow, в каждом тесте я определял $ httpBackend с ожидаемым URL.

например:

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

на самом деле я называю $ httpBackend.flush() и чек на $ httpBackend.verifyNoOutstandingExpectation(); $ httpBackend.verifyNoOutstandingRequest(); после каждого звонка. моя проблема в том, что мне нужно вернуть другой ответ для другого статуса (у меня есть 4 таких статуса). возможно ли, чтобы только 1 httpBackend вызывал разные URL-адреса и все еще выполнял мой прецедент. – manu