fix: expect.toMatchObject ignores symbol key properties by lpizzinidev · Pull Request #13639 · jestjs/jest (original) (raw)
As a result of jestjs#13639, expect.toMatchObject can now compare symbol keys. However, the diffs that it generates if a symbol key doesn't match are misleading. For example, the following assertion:
const Foo = Symbol("foo");
test("mismatched symbols", () => {
expect({ a: 1, [Foo]: {id: 1} }).toMatchObject({ a: 1, [Foo]: {id: 2} });
});fails as desired, but it displays the following diff:
- Expected - 3
+ Received + 0
Object {
"a": 1,
- Symbol(foo): Object {
- "id": 2,
- },
}Note: In inspecting the code, I wonder if getObjectSubset should use the same logic as subsetEquality - i.e., if subsetEquality does not evaluate an object's inherited string keys when determining equality, then getObjectSubset should not evaluate an object's inherited string keys for reporting on inequality? To put it another way - jestjs#13639 appears to change subsetEquality from considering an object's inherited string keys to not considering inherited string keys, and I'm not sure if that was intentional in a SemVer-minor change. For now, I've preserved the previous behavior, but let me know if this should change.
Fixes jestjs#13809