Javascript 如何将jQuery触发的事件传递给函数

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({ .... }); } }); 所以,为了测试这个函数,我尝试调用这个函数

我正在尝试使用jasmine测试一些javascript代码(主干视图)

以下是我尝试测试的定义主干视图中的函数:

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(“单击”)