Mam pewne problemy implimenting szpiegostwo w JasmineJasmine szpiedzy nie miano
Chcę sprawdzić, czy link został wciśnięty na suwaku wykorzystaniem szpiega jaśminu i jaśmin jQuery.
Oto uproszczona wersja:
mam kilka linków jako część pliku html osprzętu.
<a href="#" class="someLink">Link 1</a>
<a href="#" class="someLink">Link 2</a>
suwak:
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();
});
});
Test zawodzi. Ale "zostałem kliknięty" został zalogowany na konsoli, więc metoda jest wywoływana.
Gdybym to zrobić testy przechodzi mimo:
it('should handle link click', function(){
spyon(slider, 'handleClick');
slider.handleClick();
expect(slider.handleClick).toHaveBeenCalled();
});
Więc moje pytanie jest w istocie:
- Am I testowania tego typu rzeczy w niewłaściwy sposób?
- dlaczego szpieg nie rejestruje faktu, że metoda została wywołana?
Chyba w tym przypadku zalecana * szpieg na prototypie *: 'spyOn (Slider.prototype, 'handleClick') 'i umieść ten kod przed' Slider' creation 'new Slider (...)' (jak @EliranMalka skomentował). Czy próbowałeś tego? – zbynour