Тестирование ошибочной функции в AngularJS с помощью Jasmine никогда не вызывает функцию
У меня есть метод в сервисе, который использует debounce подчеркивания.
Внутри этого метода есть вызов метода в другом сервисе. Я пытаюсь проверить, что другой сервис называется.
В моих попытках протестировать дебазированный метод метод различных сервисов никогда не вызывался, и jasmine завершается неудачно с:
«Ожидаемый шпион aMetod был вызван».
Я точно знаю, что он называется (он записывает на консоль в Chrome), он просто называется ПОСЛЕ ожидания, что уже сбой.
Итак ... (желательно) без добавления Синона или другой зависимости и с
бонусные баллы *, предоставленные решению, не должны превращать _.debounce в $ timeout ...
Как?
angular.module('derp', [])
.service('herp', function(){
return {
aMethod: function(){
console.log('called!');
return 'blown';
}
};
})
.service('Whoa', ['herp', function(herp){
function Whoa(){
var that = this;
this.mindStatus = 'meh';
this.getMind = _.debounce(function(){
that.mindStatus = herp.aMethod();
}, 300);
}
return Whoa;
}]);
Тесты:describe('Whoa', function(){
var $injector, whoa, herp;
beforeEach(function(){
module('derp');
inject(function(_$injector_){
var Whoa;
$injector = _$injector_;
Whoa = $injector.get('Whoa');
herp = $injector.get('herp');
whoa = new Whoa();
});
});
beforeEach(function(){
spyOn(herp, 'aMethod').andCallThrough();
});
it('has a method getMind, that calls herp.aMethod', function(){
whoa.getMind();
expect(herp.aMethod).toHaveBeenCalled();
});
});
Почему ангелы-испытатели AngularJS оставили меня?
* Я не знаю, как дать реальные бонусные очки на стеке потока, но если это возможно, я буду.