Sto avendo qualche problema implimenting spionaggio in JasmineJasmine spie non essere chiamati
voglio verificare se un link è stato cliccato su un cursore con una spia di gelsomino e gelsomino jQuery.
Ecco una versione semplificata:
ho alcuni collegamenti come parte di un file fixture HTML.
<a href="#" class="someLink">Link 1</a>
<a href="#" class="someLink">Link 2</a>
cursore:
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')
}
file spec:
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();
});
});
La prova sta venendo a mancare. Ma il 'sono stato cliccato' è stato registrato nella console in modo che venga chiamato il metodo.
Se faccio questo il test viene superato se:
it('should handle link click', function(){
spyon(slider, 'handleClick');
slider.handleClick();
expect(slider.handleClick).toHaveBeenCalled();
});
Quindi la mia domanda è in sostanza:
- sono io il test per questo tipo di cose nel modo sbagliato?
- perché la spia non registra il fatto che il metodo è stato chiamato?
Credo che in questo caso si dovrebbe * spia sul prototipo *: 'spyOn (Slider.prototype, 'handleClick') 'e metti questo codice prima della' Slider' creazione 'new Slider (...)' (come commentato @EliranMalka). Hai provato questo? – zbynour