概要
JestでObjectの値をtoBeで比較するとExpected: ["object", "property"] Received: serializes to the same string
というエラーが発生することがあります。
これはtoBeが厳密比較をしており、オブジェクトや配列の中身が一致していても同じとは判定されないためです。
JavaScriptやTypeScriptで以下のような比較をしても、値の一致ではなく同じメモリ上にあるオブジェクトかどうかで判定するため、一致しないと判定されることと同じ理屈です。
const data = { id: 1, name: 2, } const expected = { id: 1, name: 2, } console.log(data === expected) // false
対応策
tostrictequalを使うことでオブジェクトの値比較をすることができます。 https://jestjs.io/ja/docs/expect#tostrictequalvalue
const data = { id: 1, name: 2 }; const expected = { id: 1, name: 2 }; expect(data).toStrictEqual(expected) // true
なおtoEqualという比較関数も存在します。
https://jestjs.io/ja/docs/expect#toequalvalue
しかし、この関数はundefinedの値は評価しないため、{a: undefined, b: 2}
と{b: 2}
は同じであると評価されます。
なのでより厳密に比較するtoStrictEqualがおすすめです。