2016-11-18 10 views
1

Я пытаюсь протестировать сервис angularjs с жасмином, который вызывает службу ресурсов, а в функции then вызывает другую функцию вложенных ресурсов. Я использую httpbackend для сброса ложных ответов. Вопрос заключается в том, что во время тестирования, не топить второй ответ на второй запрос вложенной службы ресурса, и я допустил ошибку с Ошибкой ошибок : промываться запросы: 1угловые жасмин множественные вложенные вызовы httpbackend

RestaurantService

var deferred; 
var restaurantinfo = {}; 

var loadMenu = function(){ 
    return Menu.query({}).$promise.then(function(response){ 
     restaurantinfo.menu = response 
    }) 
} 

var loadLocation = function(){ 
    return Location.query({}).$promise.then(function(response){ 
     restaurantinfo.location = response; 
    }) 
} 

var getRestaurantInfo = function(){ 
    if(!deferred && (!restaurantinfo.menu.length == 0 || restaurantinfo.location.length === 0)){ 
     deferred = $q.defer(); 
      return loadMenu() 
       .then(loadLocations) 
       .then(function(){ 
        deferred.resolve(billinghistory); 
        return deferred.promise; 
       }) 
     } else { 
      if(!deferred.promise.$$state.status){ return deferred.promise; } 
      deferred.resolve(billinghistory); 
      return deferred.promise; 
     } 
} 

испытания Spec

beforeEach(inject(function(_$httpBackend_, RestaurantService, _Menu_, _Locations_){ 
    httpBackend = _$httpBackend_; 
    mockRestaurantService = _RestaurantService_; 


    httpBackend.expect('GET', '/api/menu').respond(mockMenu); 
    httpBackend.expect('GET', '/api/locations').respond(mockLocations); 

    mockBalanceService.getRestaurantInfo(); 
    httpBackend.flush() 

})) 

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

функции LoadMenu и loadLocation просто называем Гюлер услуги Ресурсные

httpbackend является промывка первый вызов API/меню но не делает второй вызов API/местоположение

+0

, пожалуйста, можете ли вы подробно описать код обещаний angualr. –

+0

Обновление, насколько я могу, программное обеспечение, над которым я работаю, довольно проприетарно. –

ответ

0

Оказывается, я просто промолвил один из вызовов бэкэнда. Я добавил еще httpBackend.flush() и оба бэкэнд-звонка были сброшены.

0

го имущества: «ReturnValue», чтобы издеваться службу HTTP, и сделать a spyOn to call

var error = { 
       code : 500, 
       mensaje1:'err' 
      }, 

       spyOn(getRestaurantInfo) 
       .and.returnValue({ 
        then: function (callbackSuccess, callbackError) { 
         callbackError(error); 
        } 
       }); 

Это будет обещание об ошибке. Расскажите мне, хорошо ли для вашего кода. спасибо

 Смежные вопросы

  • Нет связанных вопросов^_^