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

标签 javascript jquery backbone.js jasmine

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

这是我正在尝试测试的已定义 BackBone View 中的函数:

var aView = Backbone.View.extend({

events: {
       'click #btn': 'update'
        } 

update: function(e){
    e.preventDefault();
    $.ajax({
    ....
    });
}

});

因此,为了测试该函数,我尝试调用该函数,然后监视 $.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'

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

最佳答案

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

以下内容应该可以消除您当前的错误:

it("tests update ajax", function() {

        this.aView.$el.find('.update').trigger("update");
        this.aView.update(this.aView.$("#btn").trigger("click"));

});

如果你的 View 有这个:

var aView = Backbone.View.extend({

  events: {
    'click a.update' : 'update'
  },

  update: function(e){
    e.preventDefault();
    $.ajax({
      ....
    });
  }
});

您还可以检查您的 View 事件设置是否正确。

关于javascript - 如何将 jQuery 触发事件传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18923871/

相关文章:

javascript - 如何将 Ghostcript 生成到 Node.js 环境中

javascript - 在没有轮询的情况下检测何时按下后退/前进按钮? (哈希变化)

javascript - 函数: why are all children updating in this backbone collection?

javascript - 使用js创建一个带有单选框的弹出窗口

javascript - 如何平滑放大谷歌地图中的标记?

javascript倒计时只是一个小计时器不工作

javascript - JQuery 将鼠标悬停在子元素上以更改父元素的 CSS

javascript - 延迟子菜单

javascript - 主干js中的分页

backbone.js - 简单的自引用关系模型失败