chaiテスト配列の等価性が期待どおりに機能しない


235

以下が失敗するのはなぜですか?

expect([0,0]).to.equal([0,0]);

それをテストする正しい方法は何ですか?

回答:


360

以下のために期待して.equalむしろ自分のデータよりも、オブジェクトを比較し、あなたのケースでは、2つの異なる配列です。

.eql値を深く比較するために使用します。このリンクをチェックしてください
または.deep.equal、と同じようにシミュレートするために使用できます.eql
または、あなたのケースではチェックし たいかもしれません.members

アサートされ、使用することができ.deepEqualリンクを


2
FTR、ディープイコール構文は.deepEqual()chaijs.com/api/assert)に変更されました。
Ludder、2014

7
これは変更されていません。アサート機能が表示されていますが、どのトピックスターターが懸念していた予想されません。
moka 14

5
あなたは正しい、私はよく読みませんでした。私はそれが単なる別のAPIの変更だと思った。
Ludder 14

6
to.deep.equal(['a','b'])動作していないようです。ただし、to.have.all.members(['a','b'])します。とても扱いにくい…
ジェイコブ2017

chaijs.com/plugins/deep-equal-in-any-orderは、オブジェクト属性の順序が予測できないときにうまく機能しました。
アソカン

60

ディープイコールを使用してください。ネストされた配列とネストされたJsonを比較します。

expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });

メインドキュメントサイトを参照してください。


7
これはまた、配列のために働く:expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])
alxndr

-1

これは、chaiを使用して連想配列を深くテストする方法です。

2つの連想配列が等しいと主張しようとして問題がありました。これらは実際にはJavaScriptで使用するべきではないことはわかっていますが、連想配列への参照を返すレガシーコードに関するユニットテストを作成していました。:-)

関数を呼び出す前に、変数をオブジェクト(配列ではなく)として定義することで、次のようにしました。

var myAssocArray = {};   // not []
var expectedAssocArray = {};  // not []

expectedAssocArray['myKey'] = 'something';
expectedAssocArray['differentKey'] = 'something else';

// legacy function which returns associate array reference
myFunction(myAssocArray);

assert.deepEqual(myAssocArray, expectedAssocArray,'compare two associative arrays');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.