我在 Jasmine 中进行间谍活动时遇到了一些麻烦
我想检查是否使用 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();
});
所以我的问题本质上是:
- 我是否以错误的方式测试这种类型的东西?
- 为什么间谍没有记录该方法已被调用的事实?