2016-07-11 22 views

答えて

2

ナイーブが、おそらく十分な解決策は、それらを比較する前にアレイをソートすることであろう。

should(a.sort()).be.eql(b.sort()) 

sort() works in-placeは、元の配列を変異こと。

+1

この回答は正しくありません。 .equalは参照の等価性のために===を使用します。 .eqlを使用する必要があります。 –

+0

@denbardadymノートのおかげで、私の答えを更新しました。 – Timo

1

shouldAssertion.add機能でこれを実装できます。たとえば、

var a = ['a', 'as', 'sa']; 
var b = ['sa', 'a', 'as']; 

should.Assertion.add('haveSameItems', function(other) { 
    this.params = { operator: 'to be have same items' }; 

    this.obj.forEach(item => { 
    //both arrays should at least contain the same items 
    other.should.containEql(item); 
    }); 
    // both arrays need to have the same number of items 
    this.obj.length.should.be.equal(other.length); 
}); 

//passes 
a.should.haveSameItems(b); 

b.push('d'); 

// now it fails 
a.should.haveSameItems(b); 
関連する問題