2

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 を返します。

誰がこれを引き起こしたのか考えていますか?

4

1 に答える 1

1

Backbone の最新バージョンを使用していることを確認できますか? set古いバージョンのバックボーンは、メソッド ( )のショートカット バージョンをサポートしておらず.set(key, value)、属性/値のペアを持つオブジェクトのみをパラメーターとして許可していました。

(0.9で追加されたと思います)

于 2012-08-26T19:05:34.673 に答える