当我使用nodeUnit为Backbone模型编写单元测试时,发生了一些奇怪的事情,问题可归纳为:
var Player = Backbone.Model.extend({});
var player = new Player({name: 'Jacky'});
然后我用:player.set('name','Scott')更新玩家名称。 但是我发现name属性根本没有更新(这个模型没有验证函数),并且有一些奇怪的属性,如:[0]:n,[1]:a,[2]:m,[3]:即
如果我将更新方法更改为player.set({name:'Scott'}),它的工作正常。
我做了一些快速调查,发现Backbone.Model.set方法依赖于Underscore.isObject()方法,后者实现为:
_.isObject = function(obj) {
return obj === Object(obj);
};
我在nodeUnit测试用例中调用了isObject()方法,并且在第一种情况下它工作正常,但在后一种情况下,它不能按预期工作,例如isObject('name')将返回true而不是预期错误。
任何人都知道造成这种情况的原因是什么?
答案 0 :(得分:1)
您能确定使用最新版本的Backbone吗?旧版本的Backbone不支持set
方法(.set(key, value)
)的快捷方式版本,只允许将带有属性/值对的对象作为参数。
(我相信它是在0.9中添加的)