相关疑难解决方法(0)

使用jasmine测试backbone.js应用程序 - 如何在视图上测试模型绑定?

在尝试测试视图是否与事件正确绑定时,我遇到了一些有趣的磨难.在骨干中,我们通常使用以下内容中的某些内容绑定到initialize方法中的事件something.bind("change", this.render);.在我的测试中,我想确保设置此绑定,因此我执行了以下操作: 

this.myView = new MyView();
spyOn(this.myView, "render");;
this.legendView.groupData.trigger("change");
expect(this.legendView.render).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)

但是,这不会奏效.因为绑定发生在MyView的初始化函数中,所以事件get被绑定到myView的渲染函数AT THAT TIME.因此,当您添加间谍时,它会包装渲染功能并将其设置回myView.render.但是由第一个绑定创建的闭包仍然存在,我们完全是胡说八道.那么我们能做些什么呢?我做了什么,是将我的绑定调用移动到一个单独的函数,如: 

myView = Backbone.View.extend({
initialize: function(){
    _.bindAll(this, "render");
    this.initialize_model_bindings();
},
initialize_model_bindings: function(){
    something.bind("change", this.render);
},
render: function(){ //... }
});
Run Code Online (Sandbox Code Playgroud)

然后我的测试看起来像:

this.myView = new MyView();
spyOn(this.myView, "render");
this.myView.initialize_model_bindings();
this.legendView.groupData.trigger("change");
expect(this.legendView.render).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)

这有效,但我正在寻找更好的解决方案.谢谢

javascript view backbone.js jasmine

20
推荐指数
2
解决办法
4302
查看次数

标签 统计

backbone.js ×1

jasmine ×1

javascript ×1

view ×1