我有一个类:
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();
});
现在的问题是,在测试中,没有调用间谍,但是代码进入了类的原始toggleServices()
而不是间谍。似乎我不明白如何创建一个间谍,以便在this.toggleServices
init()
中向{{1}}提出请求。
有什么建议吗?
答案 0 :(得分:3)
你应该在设置监听器之前监视,换句话说,在调用渲染之前只是间谍。
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();
});