Javascript 如何将jQuery触发的事件传递给函数
我正在尝试使用jasmine测试一些javascript代码(主干视图) 以下是我尝试测试的定义主干视图中的函数:Javascript 如何将jQuery触发的事件传递给函数,javascript,jquery,backbone.js,jasmine,Javascript,Jquery,Backbone.js,Jasmine,我正在尝试使用jasmine测试一些javascript代码(主干视图) 以下是我尝试测试的定义主干视图中的函数: var aView = Backbone.View.extend({ events: { 'click #btn': 'update' } update: function(e){ e.preventDefault(); $.ajax({ .... }); } }); 所以,为了测试这个函数,我尝试调用这个函数
var aView = Backbone.View.extend({
events: {
'click #btn': 'update'
}
update: function(e){
e.preventDefault();
$.ajax({
....
});
}
});
所以,为了测试这个函数,我尝试调用这个函数,然后调用spyOn$.ajax,看看它是否是用适当的url调用的。
但是,问题是我无法将事件传递到函数中,以便它执行ajax
以下是jasmine代码块:
it("tests update ajax", function() {
spyOn($, "ajax");
//Call update function
this.aView.update(this.aView.$("#btn").trigger("click"));
expect($.ajax).toHaveBeenCalled();
});
以下是我当前收到的错误:
TypeError: Object [object Object] has no method 'preventDefault'
我希望我已经提供了所有必要的信息,问题很明确:)您不应该直接调用更新方法。如果您触发事件,它将工作,调用update方法 以下内容将删除您当前的错误:
it("tests update ajax", function() {
this.aView.$el.find('.update').trigger("update");
this.aView.update(this.aView.$("#btn").trigger("click"));
});
如果您的观点是这样的:
var aView = Backbone.View.extend({
events: {
'click a.update' : 'update'
},
update: function(e){
e.preventDefault();
$.ajax({
....
});
}
});
这样,您还可以检查视图事件是否设置正确。在视图中,事件声明为
{'click#btn':'update'}
,因此我试图将该事件传递给update函数。。。这听起来不对,我遗漏了什么吗?更新:谢谢!得到它,而不是调用函数中的事件,我只需触发单击,函数就会被调用。我想我试过了。。。哦,现在很好用:)。。因此,必须将内部代码更改为this.detailsView.$(“#btnSave”).trigger(“单击”)代码>