.toEqual()はプレーンオブジェクトのすべてのフィールドの等価性をチェックします。
expect(
{"key1":"pink wool","key2":"diorite"}
).toEqual(
{"key2":"diorite","key1":"pink wool"}
);
これは合格です。
ただし、配列については同じではありません。
expect(["pink wool", "diorite"]).toEqual(["diorite", "pink wool"]);
Jestのドキュメントではこれを行うマッチャー関数はないようです。つまり、要素の位置に関係なく2つの配列の等価性をテストします。ある配列の各要素を、他の配列のすべての要素に対してテストする必要がありますか?それとも別の方法がありますか?
順序を比較せずに配列を比較する組み込みメソッドはありませんが、比較を行う前に .sort()
を使用して単純に配列をソートできます。
expect(["ping wool", "diorite"].sort()).toEqual(["diorite", "pink wool"].sort());`
this fiddle で例を確認できます。
要素をセットに入れます。ジェストはこれらを一致させる方法を知っています。
expect(new Set(["pink wool", "diorite"])).toEqual(new Set(["diorite", "pink wool"]));
use expect.arrayContaining()
https://jestjs.io/docs/en/expect#expectarraytainingarray
例えば。、
expect(["ping wool", "diorite"])
.toEqual(expect.arrayContaining(["diorite", "pink wool"]));
既に述べたようにexpect.arrayContaining
は、actual
配列にexpected
配列がサブセットとして含まれているかどうかを確認します。同等性を確認するには
expected
配列にactual
配列が含まれていること:// This is TypeScript, but remove the types and you get JavaScript
const expectArrayEquivalence = <T>(actual:T[], expected: T[]) => {
expect(actual).toEqual(expect.arrayContaining(expected));
expect(expected).toEqual(expect.arrayContaining(actual));
};
これには、最初のアサーションでテストが失敗したときに、actual
にない要素のみが認識され、expected
にない余分な要素は認識されないという問題が依然としてあります。