Jestのドキュメントは次のとおりです。
toBeは、値が期待どおりであることを確認するだけです。 ===を使用して、厳密な等価性をチェックします。
toEqual
の場合:
2つのオブジェクトの値が同じであることを確認する場合は、.toEqualを使用します。このマッチャーは、オブジェクトの同一性をチェックするのではなく、すべてのフィールドの等価性を再帰的にチェックします。これは「ディープイコール」とも呼ばれます。たとえば、このテストスイートではtoEqualとtoBeの動作が異なるため、すべてのテストに合格します。
const x = { a: { b: 3 } };
const y = { a: { b: 3 } };
expect(x).toEqual(y);
expect(x).toBe(y);
この場合、toEqual
はパスしますが、toBe
は失敗します。 toEqual
は、deep equalチェックを行うため合格することを理解しています。この場合toBe
が失敗するのはなぜですか?
また、toBe
とtoEqual
を使用するためのベストプラクティスはありますか(Jestだけでなく、他のテストフレームワークでも)。
x
とy
は異なるインスタンスであり、(x === y) === false
のように等しくないため、失敗します。 toBe
を使用する他のすべての文字列、数値、ブール値などのプリミティブにはtoEqual
を使用できます。例えば
x = 4
y = 4
x === y // true
x = 'someString'
y = 'someString'
x === y // true
空のオブジェクトでも等しくない
x = {}
y = {}
x === y //false