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

How to pass jQuery triggered event to function

本文关键字:事件 函数 jQuery      更新时间:2023-09-26

我正在尝试使用jasmine测试一些javascript代码(BackBone View)

这是我尝试测试的已定义 BackBone 视图中的函数:

var aView = Backbone.View.extend({
events: {
       'click #btn': 'update'
        } 
update: function(e){
    e.preventDefault();
    $.ajax({
    ....
    });
}
});

因此,为了测试该函数,我正在尝试调用该函数,然后 spyOn $.ajax 以查看它是否使用适当的 url 调用。但是,问题是我无法将事件传递到函数中以便它执行 ajax。

这是茉莉花代码块:

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({
      ....
    });
  }
});

这样,您还可以检查视图事件是否设置正确。