1. ホーム
  2. testing

[解決済み] Jestの「toBe」と「toEqual」の違いは何ですか?

2022-08-20 15:56:22

質問

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 が通るのは 深いイコール をチェックするからです。なぜ toBe はこの場合失敗するのでしょうか?

また toBetoEqual (を使うことができますか?(Jestだけでなく、他のテストフレームワークでも)?

どのように解決するのですか?

失敗の原因 xy のように、異なるインスタンスであり、同じではありません。 (x === y) === false . あなたは toBe は、文字列、数値、ブーリアンなどのプリミティブなものに対して使用します。 toEqual . 例えば

x = 4 
y = 4
x === y // true

x = 'someString'
y = 'someString'
x === y // true

空っぽのオブジェクトも等しくありません

x = {}
y = {}
x === y //false