модульное тестирование рекурсивного http-запроса с угловым httpbackend

Я выполняю модульное тестирование своего приложения AngularJS, используя их настройку с жасмином и кармой. Я использую макет AngularJS $httpbackend:

https://docs.angularjs.org/api/ngMock/service/$httpBackend

У меня проблема с тестированием следующего модуля:

define([
    'angular',
    'app',
    'angularRoute',
    ], function (angular, app) {
        'use strict';

        app.config(function ( $httpProvider) {        
            /* Angular automatically adds this header to the request,
               preventing us from being able to make requests to the server on another port */
            delete $httpProvider.defaults.headers.common['X-Requested-With'];
        }).factory('equipmentService', ['$http', '$rootScope', function($http, $rootScope) {
            var factory = {
                setEquipmentState: function(state){
                    this.equipmentState = state.state;
                    console.log('equipment state', this.equipmentState);
                    redirectState(this.equipmentState);
                }
            }
            var redirectState = function (state) {
                switch(state) {
                    case 'Active':
                        $location.path('/active');
                        break;
                    case 'Review':
                        $location.path('/review');
                        break;
                    default:
                        // don't change views
                }
            }

            function stateCheck () {
                $http.get($rootScope.backendServer+'/equipment/state/changed')
                .then(function (data) {
                    factory.setEquipmentState(data.data);
                })
                .then(stateCheck);
            }

            stateCheck();


            return factory;
        }]);
});

У меня всегда есть ожидающий http-запрос на сервер; как только сервер ответит, отправьте еще один http-запрос. Из-за этого, даже если мой фиктивный httpbackend ожидает запрос, как только он ответит, я не знаю, как избежать ошибки:

Ошибка: Неожиданный запрос: GET url
Больше запросов не ожидается

Есть ли способ игнорировать эту ошибку для этого конкретного запроса? Или способ для макета httpbackend ожидать бесконечных запросов к этому URL-адресу?


person user3711471    schedule 30.06.2014    source источник


Ответы (2)


Следует использовать набор методов $httpBackend.when, когда ваши тесты ожидают более одного запроса к одному и тому же URL-адресу.

https://docs.angularjs.org/api/ngMock/service/$httpBackend

person SomeKittens    schedule 30.10.2014

Вы должны использовать комбинацию $httpBackend.expect и $httpBackend.when для покрытия необходимого вызова, который может произойти несколько раз:

$httpBackend.expectPUT('URI')... (делает обязательным) $httpBackend.whenPUT('URI')... (позволяет выполнять несколько вызовов)

person Tom Bevelander    schedule 10.03.2015