簡體   English   中英

比較兩個數組時,單元測試equals()失敗

[英]Unit Test equals() fails when comparing two Arrays

以下代碼中的最后一個單元測試失敗,可能是因為equals()使用的==運算符未正確比較數組。 但是,我不知道為什么會這樣。

為什么將從SC.Record檢索的SC.Record與新實例化的數組進行比較時equals()失敗?

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'));
}
);

當比較數組時,JavaScript表現得很奇怪。 我不能告訴你為什么 ,但是我可以告訴你如何避免

使用Breaking Par中第二個函數:JavaScript Are Arrays Equal

它是類型安全的,並且在大型陣列上非常快。

您可能需要類似ArrayEquals(在Java中)的東西來檢查所有數組“組件”的相等性。

你為什么這么做

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

做就是了

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

第一種是在對keywords屬性(而不是數組)進行get時使函數返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM