nodeUnit を使用してバックボーン モデルの単体テストを作成すると、奇妙なことが起こりました。質問は次のように要約できます。
var Player = Backbone.Model.extend({});
var player = new Player({name: 'Jacky'});
次に、プレーヤー名を次のように更新します: player.set('name', 'Scott')。しかし、名前属性がまったく更新されていないことがわかりました (このモデルの検証関数はありません)。[0]: n、[1]: a、[2]: m、[3]: のような奇妙な属性があります。 e.
update メソッドを player.set({name: 'Scott'}) に変更すると、問題なく動作します。
簡単な調査を行ったところ、Backbone.Model.set メソッドは Underscore.isObject() メソッドに依存し、後者は次のように実装されていることがわかりました。
_.isObject = function(obj) {
return obj === Object(obj);
};
nodeUnit テスト ケースで isObject() メソッドを呼び出しました。最初のケースでは正常に動作しますが、後者のケースでは期待どおりに動作しません。たとえば、isObject('name') は、期待される false ではなく true を返します。
誰がこれを引き起こしたのか考えていますか?