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

时间:2013-09-20 18:52:01

标签: javascript jquery backbone.js jasmine

我正在尝试使用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'

我希望我提供了所有必要的信息,问题是准确的:)

1 个答案:

答案 0 :(得分:2)

您不应直接调用更新方法。如果你触发事件,它将会调用更新方法。

以下内容应删除您当前的错误:

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

通过它,您还可以检查您的视图事件是否设置正确。