Backbone.js分析方法
Backbone.js Parse Method
我正在尝试使用sinon.js和jasmine.js对我的第一个backbone.js应用程序进行单元测试。
在这个特定的测试用例中,我使用sinon.js fakeServer方法返回一个具有以下结构的伪响应。
beforeEach( function(){
this.fixtures = {
Tasks:{
valid:{
"tasks":[
{
id: 4,
name:'Need to complete tests',
status: 0
},
{
id: 2,
name:'Need to complete tests',
status: 1
},
{
id: 3,
name:'Need to complete tests',
status: 2,
}
]
}
}
};
});
因此,当我在下面的测试用例中实际调用fetch调用时,它会正确地返回3个模型。在集合的解析方法中,我试图删除根"tasks"键,只返回对象数组,这在backbone.js文档中有提到。但当我这样做时,没有模型被添加到集合中,collection.length返回0。
describe("it should make the correct request", function(){
beforeEach( function(){
this.server = sinon.fakeServer.create();
this.tasks = new T.Tasks();
this.server.respondWith('GET','/tasks', this.validResponse( this.fixtures.Tasks.valid) );
});
it("should add the models to the tasks collections", function(){
this.tasks.fetch();
this.server.respond();
expect( this.tasks.length ).toEqual( this.fixtures.Tasks.valid.tasks.length );
});
afterEach(function() {
this.server.restore();
});
});
任务集合
T.Tasks = Backbone.Collection.extend({
model: T.Task,
url:"/tasks",
parse: function( resp, xhr ){
return resp["tasks"];
}
});
你能告诉我我在这里做错了什么吗?
我的代码的问题在于模型的验证方法,而不是集合的解析方法。我在测试这些属性,即使它们不存在。发送到验证的对象不会每次都具有所有属性。例如,在一个具有id、title和status的任务模型中,其中status默认设置为0,如果我创建一个类似的模型
var t = new Task({'title':'task title'});
t.save();
在这里,validate方法将只获取{'title':'task title'}作为validate方法的参数。
因此,在validate方法中添加这些条件也很重要,当我添加条件以检查特定属性的存在时,以及当它不是null或未定义时,我的测试开始通过。
相关文章:
- 有没有一种方法可以防止img get请求使用css或js发生
- 有条件更新d3.js力图中节点的最佳方法
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 有没有一种方法可以获得three.js的最小/lite版本
- Underscore.js某些对象的所有方法的总和
- node.js是否具有'match()'方法如果是,语法是什么
- 当数据库中的某些内容发生变化时调用HTTP方法Meteor.js
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 从React调用方法.JS州
- 从方法js中的函数获取对象属性
- 是否可以在 Vue 中嵌套方法.js以便对相关方法进行分组
- 主干 - 从我的原型视图调用方法.js
- $(这个).方法(js 或 jquery)
- 如何在噩梦中运行多种评估方法.js
- 如何从骨干中的集合调用模型的方法.js
- 如何在传单中使用 .off() 事件方法.js
- 检查这个的好方法和干净的方法?(JS+HTML)
- 使用爆米花迭代提示方法.js