У меня есть service factory
, который соединяет и взаимодействует с api
для данных. Вот служба:сервисное обещание не разрешается с кармой
angular.module('dbRequest', [])
.factory('Request', ['$http', 'localConfig', function($http, localConfig){
return {
getDataRevision: function(){
return $http({
url: localConfig.dbDataUrl,
method: "GET",
crossDomain: true,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
})
}
}
}]);
Принимая сигналы от this answer, Это как я тестирование метода:
describe('Service: Request', function() {
var $scope, srvMock, $q, lc, $httpBackend;
beforeEach(module('webApp'));
beforeEach(inject(function($rootScope, Request, _$q_, _$httpBackend_, localConfig){
$scope = $rootScope.$new();
srvMock = Request;
$q = _$q_;
$httpBackend = _$httpBackend_;
lc = localConfig;
$httpBackend.expect('GET', lc.dbDataUrl);
$httpBackend.when('GET', lc.dbDataUrl).respond({
success: ["d1","d2", "d3"]
});
}));
it('should return a promise', function(){
expect(srvMock.getDataRevision().then).toBeDefined();
});
it('should resolve with data', function(){
var data;
var deferred = $q.defer();
var promise = deferred.promise;
promise.then(function(res){
data = res.success;
});
srvMock.getDataRevision().then(function(res){
deferred.resolve(res);
});
$scope.$digest();
expect(data).toEqual(["d1","d2", "d3"]);
})
});
should return a promise
пассы, но следующий should resolve with data
терпит неудачу с этой ошибкой:
Expected undefined to equal [ 'd1', 'd2', 'd3' ].
Тем не менее, метод service
getDataRevision
получает вызов, но не может быть разрешен путем ложного обещания i n тест. Как внести исправление?
решение отлично работает! Однако не возражаете ли вы объяснить, как выполняется тестовый пример? Поскольку ответ «httpbackend success» всегда будет равен «ожидаемым данным»? Другими словами, как (я/должен ли я) тестировать «ответ», возвращенный из сервиса «обещание»? – faizanjehangir
@faizanjehangir Я сделал это .. посмотрю на обновление .. –