#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 . Однако я все еще получаю ту же ошибку, и я предполагаю, что это потому, что я ДУМАЮ, что я неправильно настроил / внедрил сервис, поскольку я все еще получаю ту же ошибку после предложенного вами изменения.