diff --git a/src/utils.js b/src/utils.js index d340df57..eef2840e 100644 --- a/src/utils.js +++ b/src/utils.js @@ -409,7 +409,7 @@ const utils = { const existing = dest[key] if (isPlainObject(value) && isPlainObject(existing)) { utils.deepMixIn(existing, value) - } else { + } else if (existing === undefined || value !== undefined) { dest[key] = value } } diff --git a/test/unit/utils/extendUtils.test.js b/test/unit/utils/extendUtils.test.js index 6d4c8783..432edfac 100644 --- a/test/unit/utils/extendUtils.test.js +++ b/test/unit/utils/extendUtils.test.js @@ -54,6 +54,15 @@ describe('utils.deepMixIn', function () { assert.deepEqual(expected, actual, 'sorce own properties recursivly copied and overriden into dest') assert.equal(dest, utils.deepMixIn(dest), 'empty source argument returns dest') }) + + it('skips source properties that resolve to undefined if a destination value exists', function () { + const dest = { name: 'John', age: 90 } + const src = { name: 'John', age: undefined } + const expected = { name: 'John', age: 90 } + const actual = utils.deepMixIn(dest, src) + + assert.deepEqual(expected, actual) + }) }) describe('utils.extend', function () {