[英]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.