我正在尝试使用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'
我希望我提供了所有必要的信息,问题是准确的:)
答案 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({
....
});
}
});
通过它,您还可以检查您的视图事件是否设置正确。