Угловые несколько вложенных вызовов httpbackend

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

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/menu, но не выполняет второй вызов api/location

2 ответа

Решение

Хорошо, получается, что я только сбрасывал один из вызовов бэкэнда. Я добавил еще один httpBackend.flush(), и оба внутренних вызова были сброшены.

th свойство: returnValue для насмешки службы http и шпионажа к вызову

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

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

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

Другие вопросы по тегам