【发布时间】:2012-07-16 18:25:14
【问题描述】:
我正在编写一个简单的点击处理程序,需要传入事件(像这样)
Thing = function($){
var MyObject = function(opts){
this.opts = opts;
};
MyObject.prototype.createSomething = function(){
var that = this;
$('#some_dom_element').live('click', function(e) {
that.doStuff(e);
});
};
MyObject.prototype.doStuff = function(e) {
//do some javascript stuff ...
e.preventDefault();
};
return MyObject;
}(jQuery);
目前在我的 jasmine 规范中,我有一些东西可以监视我期望被调用的函数(但是因为它是用 e 调用的——不是没有 args——我的断言失败了)
it ("live click handler added to the dom element", function(){
var doSpy = spyOn(sut, 'doStuff');
sut.createSomething();
$("#some_dom_element").trigger('click');
expect(doSpy).toHaveBeenCalledWith();
});
如何更正此“toHaveBeenCalledWith”以按预期工作?
更新
我无法按原样获得公认的答案,但我可以稍微改变它,以下是我的 100% 工作示例
it ("should prevent default on click", function(){
var event = {
type: 'click',
preventDefault: function () {}
};
var preventDefaultSpy = spyOn(event, 'preventDefault');
sut.createSomething();
$("#some_dom_element").trigger(event);
expect(preventDefaultSpy).toHaveBeenCalledWith();
});
【问题讨论】:
标签: javascript jasmine dom-events jasmine-jquery