diff --git a/e2e/__tests__/__snapshots__/snapshotSerializers.test.ts.snap b/e2e/__tests__/__snapshots__/snapshotSerializers.test.ts.snap index 4acc30034214..cc4cb7ebee4b 100644 --- a/e2e/__tests__/__snapshots__/snapshotSerializers.test.ts.snap +++ b/e2e/__tests__/__snapshots__/snapshotSerializers.test.ts.snap @@ -2,10 +2,24 @@ exports[`Snapshot serializers renders snapshot 1`] = ` Object { + "snapshot serializers works with array of strings in property matcher 1": " +Object { + \\"arrayOfStrings\\": Array [ + \\"stream\\", + ], +} +", "snapshot serializers works with default serializers 1": "
+", + "snapshot serializers works with expect.XXX within array in property matcher 1": " +Object { + \\"arrayOfStrings\\": Array [ + Any, + ], +} ", "snapshot serializers works with first plugin 1": "foo - 1", "snapshot serializers works with nested serializable objects 1": "foo - bar - 2", diff --git a/e2e/__tests__/snapshotSerializers.test.ts b/e2e/__tests__/snapshotSerializers.test.ts index 00748140f7ed..210dada06e02 100644 --- a/e2e/__tests__/snapshotSerializers.test.ts +++ b/e2e/__tests__/snapshotSerializers.test.ts @@ -20,8 +20,8 @@ const runAndAssert = () => { '--no-cache', ]); const json = result.json; - expect(json.numTotalTests).toBe(7); - expect(json.numPassedTests).toBe(7); + expect(json.numTotalTests).toBe(9); + expect(json.numPassedTests).toBe(9); expect(json.numFailedTests).toBe(0); expect(json.numPendingTests).toBe(0); expect(result.status).toBe(0); diff --git a/e2e/snapshot-serializers/__tests__/snapshot.test.js b/e2e/snapshot-serializers/__tests__/snapshot.test.js index fb76bb95a948..093024192c62 100644 --- a/e2e/snapshot-serializers/__tests__/snapshot.test.js +++ b/e2e/snapshot-serializers/__tests__/snapshot.test.js @@ -91,4 +91,20 @@ describe('snapshot serializers', () => { }); expect(test).toMatchSnapshot(); }); + + it('works with array of strings in property matcher', () => { + expect({ + arrayOfStrings: ['stream'], + }).toMatchSnapshot({ + arrayOfStrings: ['stream'], + }); + }); + + it('works with expect.XXX within array in property matcher', () => { + expect({ + arrayOfStrings: ['stream'], + }).toMatchSnapshot({ + arrayOfStrings: [expect.any(String)], + }); + }); }); diff --git a/packages/jest-snapshot/src/__tests__/utils.test.ts b/packages/jest-snapshot/src/__tests__/utils.test.ts index f28efd12128d..93193ff5977c 100644 --- a/packages/jest-snapshot/src/__tests__/utils.test.ts +++ b/packages/jest-snapshot/src/__tests__/utils.test.ts @@ -9,7 +9,6 @@ jest.mock('fs'); import fs from 'fs'; import path from 'path'; -import assert from 'assert'; import chalk from 'chalk'; import { @@ -202,85 +201,14 @@ test('serialize handles \\r\\n', () => { describe('DeepMerge', () => { it('Correctly merges objects with property matchers', () => { - /* eslint-disable sort-keys */ - // to keep keys in numerical order rather than alphabetical - const target = { - data: { - one: 'one', - two: 'two', - three: [ - { - four: 'four', - five: 'five', - }, - // Include an array element not present in the propertyMatchers - { - six: 'six', - seven: 'seven', - }, - ], - eight: [{nine: 'nine'}], - }, - }; + const target = {data: {bar: 'bar', foo: 'foo'}}; const matcher = expect.any(String); - const propertyMatchers = { - data: { - two: matcher, - three: [ - { - four: matcher, - }, - ], - eight: [ - {nine: matcher}, - // Include an array element not present in the target - {ten: matcher}, - ], - }, - }; + const propertyMatchers = {data: {foo: matcher}}; const mergedOutput = deepMerge(target, propertyMatchers); - // Use assert.deepStrictEqual() instead of expect().toStrictEqual() - // since we want to actually validate that we got the matcher - // rather than treat it specially the way that expect() does - assert.deepStrictEqual(mergedOutput, { - data: { - one: 'one', - two: matcher, - three: [ - { - four: matcher, - five: 'five', - }, - { - six: 'six', - seven: 'seven', - }, - ], - eight: [{nine: matcher}, {ten: matcher}], - }, - }); - - // Ensure original target is not modified - expect(target).toStrictEqual({ - data: { - one: 'one', - two: 'two', - three: [ - { - four: 'four', - five: 'five', - }, - { - six: 'six', - seven: 'seven', - }, - ], - eight: [{nine: 'nine'}], - }, - }); - /* eslint-enable sort-keys */ + expect(mergedOutput).toStrictEqual({data: {bar: 'bar', foo: matcher}}); + expect(target).toStrictEqual({data: {bar: 'bar', foo: 'foo'}}); }); }); diff --git a/packages/jest-snapshot/src/utils.ts b/packages/jest-snapshot/src/utils.ts index d0e4b20eb049..992fa72926d0 100644 --- a/packages/jest-snapshot/src/utils.ts +++ b/packages/jest-snapshot/src/utils.ts @@ -178,21 +178,6 @@ export const saveSnapshotFile = ( ); }; -const deepMergeArray = (target: Array, source: Array) => { - // Clone target - const mergedOutput = target.slice(); - - source.forEach((element, index) => { - if (typeof mergedOutput[index] === 'undefined') { - mergedOutput[index] = element; - } else { - mergedOutput[index] = deepMerge(target[index], element); - } - }); - - return mergedOutput; -}; - export const deepMerge = (target: any, source: any) => { const mergedOutput = {...target}; if (isObject(target) && isObject(source)) { @@ -200,8 +185,6 @@ export const deepMerge = (target: any, source: any) => { if (isObject(source[key]) && !source[key].$$typeof) { if (!(key in target)) Object.assign(mergedOutput, {[key]: source[key]}); else mergedOutput[key] = deepMerge(target[key], source[key]); - } else if (Array.isArray(source[key])) { - mergedOutput[key] = deepMergeArray(target[key], source[key]); } else { Object.assign(mergedOutput, {[key]: source[key]}); }