我有一个类,比如:
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();
});