当我使用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]: e.
如果我将更新方法更改为 player.set({name: 'Scott'}),它工作正常。
我做了一些快速调查,发现 Backbone.Model.set 方法依赖于 Underscore.isObject() 方法,后者实现为:
_.isObject = function(obj) {
return obj === Object(obj);
};
我在 nodeUnit 测试用例中调用了 isObject() 方法,在第一种情况下它工作正常,但在后一种情况下,它不能按预期工作,例如 isObject('name') 将返回 true 而不是预期的 false。
有人知道是什么原因造成的吗?