diff --git a/CHANGELOG.md b/CHANGELOG.md index bb99b1239a92..bd1237f2bde2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Fixes +- `[expect]` Add negative equality tests for iterables ([#8260](https://github.com/facebook/jest/pull/8260)) - `[jest-haste-map]` Resolve fs watcher EMFILE error ([#8258](https://github.com/facebook/jest/pull/8258)) ### Chore & Maintenance diff --git a/packages/expect/src/__tests__/utils.test.js b/packages/expect/src/__tests__/utils.test.js index 7ff609a8ab87..0850053b120a 100644 --- a/packages/expect/src/__tests__/utils.test.js +++ b/packages/expect/src/__tests__/utils.test.js @@ -241,6 +241,36 @@ describe('iterableEquality', () => { ).toBe(false); }); + test('returns false when given inequal set within a set', () => { + expect( + iterableEquality(new Set([new Set([2])]), new Set([new Set([1, 2])])), + ).toBe(false); + expect( + iterableEquality(new Set([new Set([2])]), new Set([new Set([1, 2])])), + ).toBe(false); + }); + + test('returns false when given inequal map within a set', () => { + expect( + iterableEquality( + new Set([new Map([['a', 2]])]), + new Set([new Map([['a', 3]])]), + ), + ).toBe(false); + expect( + iterableEquality(new Set([new Set([2])]), new Set([new Set([1, 2])])), + ).toBe(false); + }); + + test('returns false when given inequal set within a map', () => { + expect( + iterableEquality( + new Map([['one', new Set([2])]]), + new Map([['one', new Set([1, 2])]]), + ), + ).toBe(false); + }); + test('returns true when given circular Set shape', () => { const a1 = new Set(); const a2 = new Set(); diff --git a/packages/expect/src/utils.ts b/packages/expect/src/utils.ts index 2f3f97ffe2ea..2c0f8837a5a3 100644 --- a/packages/expect/src/utils.ts +++ b/packages/expect/src/utils.ts @@ -172,7 +172,7 @@ export const iterableEquality = ( bStack.push(b); const iterableEqualityWithStack = (a: any, b: any) => - iterableEquality(a, b, aStack, bStack); + iterableEquality(a, b, [...aStack], [...bStack]); if (a.size !== undefined) { if (a.size !== b.size) {