[[Jest]]の代表的な等価アサーション、[[toBe (Jest)|toBe]]、[[toEqual (Jest)|toEqual]]、[[toStrictEqual (Jest)|toStrictEqual]]の違いについて。 ```ts import { expect, test } from "@jest/globals"; test("toBeはオブジェクトの同一性を確認する", () => { expect(1).toBe(1); expect("a").toBe("a"); expect(undefined).toBe(undefined); expect(null).toBe(null); // 参照が異なるのでNG expect({ id: 1 }).not.toBe({ id: 1 }); expect([1]).not.toBe([1]); // 同一オブジェクト(同一参照)ならOK const o = { id: 1 }; expect(o).toBe(o); const ay = [1]; expect(ay).toBe(ay); }); test("toEqualはオブジェクトの値の等価性を確認する", () => { // プロパティを見るのでOK expect({ id: 1 }).toEqual({ id: 1 }); expect([1]).toEqual([1]); // undefinedは存在しないものとみなされるのでOKになる(配列の場合は特に注意) expect({ id: 1 }).toEqual({ id: 1, name: undefined }); expect([1]).toEqual([1, undefined]); // nullはObjectなのでNG expect({ id: 1 }).not.toEqual({ id: 1, name: null }); expect([1]).not.toEqual([1, null]); // WARN: 成功するが `toBe` を使うべき expect(1).toEqual(1); expect("a").toEqual("a"); expect(undefined).toEqual(undefined); expect(null).toEqual(null); }); test("toStrictEqualはtoEqualsより厳密に確認する", () => { expect({ id: 1 }).toStrictEqual({ id: 1 }); expect([1]).toStrictEqual([1]); // undefinedも存在するものとしてちゃんと評価される(Objectの場合は一長一短かも) expect({ id: 1 }).not.toStrictEqual({ id: 1, name: undefined }); expect([1]).not.toStrictEqual([1, undefined]); }); ```