2015-03-12 4 views
-1

Я пытаюсь выполнить некоторые http.get() запросов в угловой службе, возвращая обещание.Выполнение обещаний в angularJS

Вот отрывок из моей первоначальной службы:

angular.module('dashboard').service('DashboardHTTP', ['$q', '$http', function ($q, $http) { 

    this.get_info = function() { 
     var deferred = $q.defer(); 
     $http.get('/dashboard/4/api/info', { cache: true }).success(function (data) { 
      deferred.resolve(data); 
     }).error(function() { 
      deferred.reject('Could Not Complete Request'); 
     }); 
     return deferred.promise; 
    } 
}]); 

А вот отрывок из части моего контроллера, где я называю обслуживание:

DashboardHTTP.get_info().then(
    function (response) { 
     var resp = response; 
     $rootScope.dash_info = resp; 
    }, 
    function (response) { 
     return 'error'; 
    }, 
    function (response) { 
     return 'notify'; 
    }); 

Мои вопросы:

  1. Я борюсь с определением того, сколько тестирования необходимо для такого взаимодействия. В настоящее время у меня есть следующий тест, который тестируется на уровне службы, но мне интересно, нужно ли мне тестировать на уровне контроллера, и если да, какое именно тестирование должно произойти?

    beforeEach(inject(function (_$httpBackend_, $injector) { 
        service = $injector.get('DashboardHTTP'); 
        $httpBackend = _$httpBackend_; 
    })); 
    
    afterEach(function() { 
        $httpBackend.verifyNoOutstandingExpectation(); 
        $httpBackend.verifyNoOutstandingRequest(); 
    }); 
    
    describe('get_info', function() { 
        it(' should get info from the url /api/info', function() { 
         var returnData = { data: 'lots of data' }; 
         $httpBackend.expectGET('/dashboard/4/api/info').respond(returnData); 
    
         var returnedPromise = service.get_info(); 
    
         var result; 
         returnedPromise.then(function (response) { 
          result = response; 
         }); 
    
         $httpBackend.flush(); 
    
         expect(result).toEqual(returnData); 
        }); 
    }); 
    
  2. Моя цель состоит в том, что я хочу, чтобы установить $rootScope.dash_info в ответ из запроса HTTP, сделанного Service.get_info(). Соответствует ли моя реализация в моем контроллере? Если да, то как я могу проверить, что правильные данные передаются на уровне контроллера?

ответ

0

Это, вероятно, частичный ответ, но вот мой вклад:

Ваш звонок является асинхронным, поэтому ваш тест должен быть. Используйте done.

Кроме того, вы знаете, что http.get возвращает обещание, верно? Он также имеет функции success и error, но это все еще обещание.

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