gpt4 book ai didi

javascript - Backbone.js 解析方法

转载 作者:行者123 更新时间:2023-12-01 15:05:56 24 4
gpt4 key购买 nike

我正在尝试使用 sinon.js and 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 个模型。在集合的解析方法中,我尝试删除根“任务”键并仅返回对象数组,这在 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 的任务模型中,默认情况下状态设置为 0,如果我创建这样的模型

var t = new Task({'title':'task title'});
t.save();

这里,validate 方法只会获取 {'title':'task title'} 作为 validate 方法的参数。

因此,在验证方法中添加这些条件也很重要,当我添加条件以检查特定属性是否存在以及当它不为 null 或未定义时,我的测试开始通过。

关于javascript - Backbone.js 解析方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9047831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com