toBe
同じ格納場所を指しているかどうか
const obj = {};
expect(obj).toBe(obj);
上はパスしますが、いつからか下記のtoStrictEqual
を使ってくださいというような警告が出るようになったので、toStrictEqual
を使いましょう。
toStrictEqual
同じ格納場所じゃなくていいが、中身がまったく同じかどうか。
const expected = {foo: 123};
const value = {foo: 123};
// ok
expect(expected).toEqual(value);
toEqual
同じ格納場所じゃなくていいが、中身が同じかどうか。ただし値がundefined
のプロパティに関しては無くても良い。
const expected = {foo: 123, bar: undefined};
const value = {foo: 123};
// ok
expect(expected).toEqual(value);
ちなみに順番は同じじゃなくても良し。
const expected = {foo: 1};
const value = {foo: 1};
// ok
expect({foo: 1, bar: 2}).toEqual({bar: 2, foo: 1});
toMatchObject
同じ格納場所じゃなくて良くて、中身も完全に同じじゃなくても良いが、期待していないプロパティは含めては駄目です。
const expected = {foo: 1, bar: 2};
const value = {foo: 1};
// ok
expect(expected).toMatchObject({foo: 1});
// fail
expect(expected).toMatchObject({foo: 1, baz: 3});