diff --git a/CHANGELOG.md b/CHANGELOG.md index f5c0c99c16f5..760947fc7e62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### Fixes - `[jest-worker]` When a process runs out of memory worker exits correctly and doesn't spin indefinitely ([#13054](https://github.com/facebook/jest/pull/13054)) +- `[@jest/expect-utils]` Fix deep equality of ImmutableJS Record ([#13055](https://github.com/facebook/jest/pull/13055)) ### Chore & Maintenance diff --git a/packages/expect-utils/src/__tests__/utils.test.ts b/packages/expect-utils/src/__tests__/utils.test.ts index f47aec654384..4fa5a539af53 100644 --- a/packages/expect-utils/src/__tests__/utils.test.ts +++ b/packages/expect-utils/src/__tests__/utils.test.ts @@ -6,7 +6,7 @@ * */ -import {List, OrderedMap, OrderedSet} from 'immutable'; +import {List, OrderedMap, OrderedSet, Record} from 'immutable'; import {stringify} from 'jest-matcher-utils'; import { arrayBufferEquality, @@ -537,6 +537,13 @@ describe('iterableEquality', () => { const b = List(['newValue']).toOrderedSet(); expect(iterableEquality(a, b)).toBe(true); }); + + test('returns true when given Immutable Record without an OwnerID', () => { + class TestRecord extends Record({dummy: ''}) {} + const a = new TestRecord().merge({dummy: 'data'}); + const b = new TestRecord().set('dummy', 'data'); + expect(iterableEquality(a, b)).toBe(true); + }); }); describe('arrayBufferEquality', () => { diff --git a/packages/expect-utils/src/jasmineUtils.ts b/packages/expect-utils/src/jasmineUtils.ts index 16b0253a4f32..fc7a767a82d6 100644 --- a/packages/expect-utils/src/jasmineUtils.ts +++ b/packages/expect-utils/src/jasmineUtils.ts @@ -243,6 +243,7 @@ const IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@'; const IS_SET_SENTINEL = '@@__IMMUTABLE_SET__@@'; const IS_LIST_SENTINEL = '@@__IMMUTABLE_LIST__@@'; const IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@'; +const IS_RECORD_SYMBOL = '@@__IMMUTABLE_RECORD__@@'; export function isImmutableUnorderedKeyed(maybeKeyed: any) { return !!( @@ -283,3 +284,10 @@ export function isImmutableOrderedSet(maybeSet: any) { maybeSet[IS_ORDERED_SENTINEL] ); } + +export function isImmutableRecord(maybeSet: any) { + return !!( + maybeSet && + maybeSet[IS_RECORD_SYMBOL] + ); +} \ No newline at end of file diff --git a/packages/expect-utils/src/utils.ts b/packages/expect-utils/src/utils.ts index e4605426ae70..daef65bfc7ca 100644 --- a/packages/expect-utils/src/utils.ts +++ b/packages/expect-utils/src/utils.ts @@ -13,6 +13,7 @@ import { isImmutableList, isImmutableOrderedKeyed, isImmutableOrderedSet, + isImmutableRecord, isImmutableUnorderedKeyed, isImmutableUnorderedSet, } from './jasmineUtils'; @@ -260,7 +261,8 @@ export const iterableEquality = ( if ( !isImmutableList(a) && !isImmutableOrderedKeyed(a) && - !isImmutableOrderedSet(a) + !isImmutableOrderedSet(a) && + !isImmutableRecord(a) ) { const aEntries = Object.entries(a); const bEntries = Object.entries(b);