From 7652055def9392d312499bdea2203cff1c4b19e4 Mon Sep 17 00:00:00 2001 From: Dave Normington Date: Fri, 21 Jan 2022 11:39:01 +0000 Subject: [PATCH] fix(matcher-utils): correct diff for expect asymmetric matchers --- .../__snapshots__/index.test.ts.snap | 19 +++++++++++ .../src/__tests__/index.test.ts | 34 +++++++++++++++++++ packages/jest-matcher-utils/src/index.ts | 7 ---- 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap b/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap index 449a8ac82a93..a89c3850194b 100644 --- a/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap +++ b/packages/jest-matcher-utils/src/__tests__/__snapshots__/index.test.ts.snap @@ -88,6 +88,25 @@ exports[`ensureNumbers() with options promise resolves isNot true expected 1`] = Expected has value: null `; +exports[`printDiffOrStringify expected asymmetric matchers should be diffable 1`] = ` +- Expected - 2 ++ Received + 2 + +- ObjectContaining { ++ Object { + "array": Array [ + Object { + "3": "three", + "four": "4", + "one": 1, +- "two": 2, ++ "two": 1, + }, + ], + "foo": "bar", + } +`; + exports[`stringify() toJSON errors when comparing two objects 1`] = ` expect(received).toEqual(expected) // deep equality diff --git a/packages/jest-matcher-utils/src/__tests__/index.test.ts b/packages/jest-matcher-utils/src/__tests__/index.test.ts index 668307405512..9ed9cc9e17e3 100644 --- a/packages/jest-matcher-utils/src/__tests__/index.test.ts +++ b/packages/jest-matcher-utils/src/__tests__/index.test.ts @@ -342,3 +342,37 @@ describe('matcherHint', () => { expect(received).toMatch(substringPositive); }); }); + +describe('printDiffOrStringify', () => { + test('expected asymmetric matchers should be diffable', () => { + jest.dontMock('jest-diff'); + jest.resetModules(); + const {printDiffOrStringify} = require('../'); + + const expected = expect.objectContaining({ + array: [ + { + 3: 'three', + four: '4', + one: 1, + two: 2, + }, + ], + foo: 'bar', + }); + const received = { + array: [ + { + 3: 'three', + four: '4', + one: 1, + two: 1, + }, + ], + foo: 'bar', + }; + expect( + printDiffOrStringify(expected, received, 'Expected', 'Received', false), + ).toMatchSnapshot(); + }); +}); diff --git a/packages/jest-matcher-utils/src/index.ts b/packages/jest-matcher-utils/src/index.ts index 84aca72cd345..7210d37c624c 100644 --- a/packages/jest-matcher-utils/src/index.ts +++ b/packages/jest-matcher-utils/src/index.ts @@ -293,13 +293,6 @@ const isLineDiffable = (expected: unknown, received: unknown): boolean => { return false; } - if ( - expectedType === 'object' && - typeof (expected as any).asymmetricMatch === 'function' - ) { - return false; - } - if ( receivedType === 'object' && typeof (received as any).asymmetricMatch === 'function'