Я довольно новичок в JS, и у меня возникли некоторые проблемы с тестированием асинхронных методов с помощью жасмина.
Вот класс, который я хочу протестировать:
test.factory('service', ['$http', '$q', function($http, $q) {
var _func = function(varB, successCallback, errorCallback) {
//Sanity check on input
if (isNaN(varB)) {
errorCallback('varB has to be a number');
return;
}
if (parseInt(varB) < 0) {
errorCallback('varB count has to be positive');
return;
}
$http.get('http://www.test.com').then(function(response) {
var data = angular.copy(response.data);
if (successCallback) {
successCallback(data);
}
}, function(errorResponse) {
if (errorCallback) {
errorCallback(errorResponse.data);
}
});
};
return {
func: function(varB) {
return $q(function(resolve, reject) {
_func(varB, resolve, reject);
});
}
};
}]);
Один изtests:
beforeEach(inject(function($injector) {
service = $injector.get(
'service');
$httpBackend = $injector.get('$httpBackend');
}));
it('should use the rejection handler if varB is in invalid format',
function() {
var successHandler = jasmine.createSpy('success');
var failHandler = jasmine.createSpy('fail');
service.func('abc').then(successHandler, failHandler);
expect(successHandler).not.toHaveBeenCalled();
expect(failHandler).toHaveBeenCalledWith('varB has to be a number');
}
);
Строка в тесте: expect(failHandler).toHaveBeenCalledWith('varB has to be a number');
по какой-либо причине никогда не выполняется.Я даже попытался поместить операторы отладки в класс обслуживания, чтобы увидеть, были ли достигнуты методы и достигли ли они.Но макет не смог обнаружить, что обратный вызов был вызван с заданным аргументом.
Было бы здорово получить некоторые идеи!Спасибо!