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