Модульный тест equals () не проходит при сравнении двух массивов - PullRequest
1 голос
/ 05 октября 2011

Последний модульный тест в следующем коде завершается неудачей, возможно, потому, что оператор ==, который используется equals(), не сравнивает массивы должным образом. Однако я не могу понять, почему это происходит.

Почему equals() дает сбой при сравнении массива, извлеченного из SC.Record, с недавно созданным массивом?

monster_model.js

BagOfTricks.Monster = SC.Record.extend(
{
  name: SC.Record.attr(String, { defaultValue: 'Unspecified' }),
  level: SC.Record.attr(Number, { defaultValue: 0 }),
  keywords: SC.Record.attr(Array, { defaultValue: function() { return [ 'Unspecified' ] } })
}
);

monster_test.js

var defaultMonster;

module("BagOfTricks.Monster", {
    setup: function() {
        defaultMonster = BagOfTricks.store.createRecord( BagOfTricks.Monster, {} );
    },
    teardown: function() {
        BagOfTricks.store.reset();
    }
}
);

test("Default monster created as expected?", function() {
    equals(defaultMonster.get('name'), 'Unspecified');
    equals(defaultMonster.get('level'), 0);

    // The following test fails.
    var defaultKeywordArray = ['Unspecified'];
    equals(defaultKeywordArray, defaultMonster.get('keywords'));
}
);

Ответы [ 3 ]

1 голос
/ 05 октября 2011

JavaScript ведет себя довольно странно, когда дело касается сравнения массивов.Я не могу сказать вам почему , но я могу сказать вам как этого избежать .

Используйте функцию second из Разрыв: JavaScript равен массивам .

Он безопасен для типов и довольно быстр для больших массивов.

0 голосов
/ 05 октября 2011

Почему ты делаешь

keywords: SC.Record.attr(Array, { defaultValue: function() { return [ 'Unspecified' ] } })

просто сделай

keywords: SC.Record.attr(Array, { defaultValue: [ 'Unspecified' ] })

первый вызывает возврат функции при выполнении get в свойстве keywords, а не в массиве.

0 голосов
/ 05 октября 2011

Возможно, вам нужно что-то вроде ArrayEquals (в Java), чтобы проверить наличие равных для всех "компонентов" массива.

...