Tôi đang gặp một số rắc rối khi gián điệp trong JasmineCác gián điệp hoa nhài không được gọi là
Tôi muốn kiểm tra xem một liên kết đã được nhấp vào thanh trượt bằng cách sử dụng một gián điệp hoa nhài và jasmine jquery.
Đây là phiên bản đơn giản:
Tôi có một số liên kết như một phần của tệp cố định html.
<a href="#" class="someLink">Link 1</a>
<a href="#" class="someLink">Link 2</a>
trượt:
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')
}
đặc tả 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();
});
});
Xét nghiệm này được không. Nhưng 'tôi đã được nhấp' đã được ghi vào bàn điều khiển để phương thức này đang được gọi.
Nếu tôi làm điều này kiểm tra đi mặc dù:
it('should handle link click', function(){
spyon(slider, 'handleClick');
slider.handleClick();
expect(slider.handleClick).toHaveBeenCalled();
});
Vì vậy, câu hỏi của tôi về cơ bản là:
- Am i thử nghiệm cho loại điều một cách sai lầm?
- tại sao gián điệp không đăng ký thực tế là phương pháp đã được gọi?
Tôi đoán trong trường hợp này bạn nên * theo dõi nguyên mẫu *: 'spyOn (Slider.prototype, 'handleClick') 'và đặt mã này trước khi tạo' Slider' 'new Slider (...)' (như @EliranMalka đã nhận xét). Bạn đã thử cái này chưa? – zbynour