Javascript 使用Jasmine在对象上测试事件处理程序
我有一门课,像:Javascript 使用Jasmine在对象上测试事件处理程序,javascript,testing,javascript-events,event-handling,jasmine,Javascript,Testing,Javascript Events,Event Handling,Jasmine,我有一门课,像: MyClass = function() { var view = { delegateEvents: function () { this.$el.on('click', 'input[type="radio"]', this.toggleServices); }, toggleServices: function () { … }, ren
MyClass = function() {
var view = {
delegateEvents: function () {
this.$el.on('click', 'input[type="radio"]', this.toggleServices);
},
toggleServices: function () {
…
},
render: function () {
blah-blah-blag (rendering the view)…
this.delegateEvents();
}
};
view.init();
return view;
}
(我如何获得$el
超出了问题的范围,但请确保它有效)
我正在用Jasmine测试这个类的一个实例,比如:
it('it handles clicks on radio buttons', function () {
var view = new MyClass();
view.render();
spyOn(view, 'toggleServices');
view.$('input[type="radio"]').eq(0).click();
expect(view.toggleServices).toHaveBeenCalled();
});
现在的问题是,在测试中,没有调用spy,但代码进入类的原始toggleServices()
,而不是spy。似乎我不明白如何创建一个间谍,它会在init()
中向this.toggleServices
发送请求
有什么建议吗?您应该在设置侦听器之前进行监视,换句话说,就是在调用呈现之前进行监视
it('it handles clicks on radio buttons', function () {
var view = new MyClass();
spyOn(view, 'toggleServices');
view.render();
view.$('input[type="radio"]').eq(0).click();
expect(view.toggleServices).toHaveBeenCalled();
});
您应该在设置侦听器之前进行监视,换句话说,就是在调用render之前进行监视
it('it handles clicks on radio buttons', function () {
var view = new MyClass();
spyOn(view, 'toggleServices');
view.render();
view.$('input[type="radio"]').eq(0).click();
expect(view.toggleServices).toHaveBeenCalled();
});
您应该在设置侦听器之前进行监视,换句话说,就是在调用render之前进行监视
it('it handles clicks on radio buttons', function () {
var view = new MyClass();
spyOn(view, 'toggleServices');
view.render();
view.$('input[type="radio"]').eq(0).click();
expect(view.toggleServices).toHaveBeenCalled();
});
您应该在设置侦听器之前进行监视,换句话说,就是在调用render之前进行监视
it('it handles clicks on radio buttons', function () {
var view = new MyClass();
spyOn(view, 'toggleServices');
view.render();
view.$('input[type="radio"]').eq(0).click();
expect(view.toggleServices).toHaveBeenCalled();
});
对不起,忘记接受答案了。这当然是问题所在。对不起,忘记接受答案了。这当然是问题所在。对不起,忘记接受答案了。这当然是问题所在。对不起,忘记接受答案了。当然这就是问题所在。