модульное тестирование угловой фабрики с помощью $ http

#angularjs #unit-testing

#angularjs #модульное тестирование

Вопрос:

Я трижды проверил все, и, похоже, все еще есть ошибка

Обслуживание :

 angular.module('app.services')
        .factory('eventService', ['$http', '$q', function($http, $q) {
                return {
                    get: function() {
                        var deffered = $q.defer();

                            $http.get('x')
                            .success(function(data) {
                                deffered.resolve(data);
                            })
                            .error(function(){
                                deffered.reject("could not access events");
                            });

                            return deffered.promise;
                    }
                };
            }])
 

Модульный тест:

 describe('when fetching events by service', function() {
    var service;
    var $httpBackend;
    var appConfig;
    beforeEach(function() {
        module("ngMockE2E");
        module("app.services");
        inject(function(eventService, _$httpBackend_) {
            service = eventService;
            $httpBackend = _$httpBackend_;
        });
    });
     it('should get items', function(){
           $httpBackend.expectGET('x').respond([{ name : 1}]);
           var promise = service.get();
           promise.then(function(data){
              console.log(data); 
           });

           $httpBackend.flush();
       });
});
 

Я получаю следующую ошибку на .flush()

 Error: No pending request to flush !                                                                                                                                                                                                                              
            at /test/lib/angular-mocks.js:1148                                                                                                                                                                                 
            at /test/unit/services/EventServiceSpec.js:26    
 

Также как мне убедиться, что настройка $ httpBackend используется EventService. То есть EventService генерируется с зависимостью от $ httpBackend, а не от $ http ? Я думаю, что я могу быть причиной ошибки.

Комментарии:

1. вы заставили его работать?

Ответ №1:

 $httpBackend.whenGET('x').respond([{ name : 1}]); // when you receive a request expectation, respond X
$httpBackend.expectGET('x').respond([{ name : 1}]); // add a request expectation and respond X
$httpBackend.expectGET('x'); // add a request expectation
 

таким образом, вы просто настраиваете поведение при отправке запроса вместо фактического добавления этого ожидания запроса.

Вам нужно использовать:

 $httpBackend.expectGET('x').respond([{ name : 1}]);
 

или

 $httpBackend.whenGET('x').respond([{ name : 1}]);
$httpBackend.expectGET('x');
 

Комментарии:

1. Привет, @Diego, спасибо за ответ. Теперь я понимаю разницу между .expectGET и whenGET . Однако я все еще получаю ту же ошибку, и я предполагаю, что это потому, что я ДУМАЮ, что я неправильно настроил / внедрил сервис, поскольку я все еще получаю ту же ошибку после предложенного вами изменения.