У меня возникли проблемы с шпионажем в Жасмин
Я хочу проверить, была ли нажата ссылка на слайдере, используя jasmine spy и jasmine jquery.
Вот упрощенная версия:
У меня есть несколько ссылок как часть файла приспособления html.
<a href="#" class="someLink">Link 1</a>
<a href="#" class="someLink">Link 2</a>
слайдер:
var Slider = function(links){
this.sliderLinks = $(links);
this.bindEvents();
}
Slider.prototype.bindEvents = function(){
this.sliderLinks.on('click', this.handleClick);
}
Slider.prototype.handleClick = function(e){
console.log('i have been clicked')
}
файл спецификации:
describe('Slider', function(){
var slider;
beforeEach(function(){
loadFixtures('slider.html');
slider = new Slider('.someLink');
});
it('should handle link click', function(){
spyOn(slider, 'handleClick');
$(slider.sliderLinks[0]).trigger('click');
expect(slider.handleClick).toHaveBeenCalled();
});
});
Тест провален. Но «я был нажат» был зарегистрирован в консоли, поэтому метод вызывается.
Если я сделаю это, тест пройдет:
it('should handle link click', function(){
spyon(slider, 'handleClick');
slider.handleClick();
expect(slider.handleClick).toHaveBeenCalled();
});
Итак, мой вопрос по существу:
- Я неправильно тестирую этот тип вещей?
- почему шпион не регистрирует факт вызова метода?
spyOn(Slider.prototype, 'handleClick')
и поместить этот код передSlider
созданиемnew Slider(...)
(как прокомментировал @EliranMalka). Вы пробовали это? - person zbynour   schedule 26.07.2013