I am having some trouble implimenting spying in Jasmine
I want to check if a link has been clicked on a slider using a jasmine spy and jasmine jquery.
Here is a simplified version:
I have some links as part of an html fixture file.
<a href="#" class="someLink">Link 1</a>
<a href="#" class="someLink">Link 2</a>
slider:
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')
}
spec file:
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();
});
});
The test is failing. But the 'i have been clicked' has been logged to the console so the method is being called.
If I do this the test passes though:
it('should handle link click', function(){
spyon(slider, 'handleClick');
slider.handleClick();
expect(slider.handleClick).toHaveBeenCalled();
});
So my question essentially is:
- Am i testing for this type of thing in the wrong way?
- why is the spy not registering the fact that the method has been called?
spyOn(Slider.prototype, 'handleClick')
and put this code before theSlider
creationnew Slider(...)
(as @EliranMalka commented). Have you tried this? – Aylward