[[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]);
});
```