From cda6e4b42970c6b468b13f5d62de60bf28c5a553 Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Thu, 1 Oct 2020 17:51:49 +0200 Subject: [PATCH 1/3] fix(setData): allow empty objects to be set fixes #1704 This is a tentative fix to show one possible solution, I can clean it up if you think it makes sense --- packages/test-utils/src/recursively-set-data.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/test-utils/src/recursively-set-data.js b/packages/test-utils/src/recursively-set-data.js index ea03cb62b..afe10092d 100644 --- a/packages/test-utils/src/recursively-set-data.js +++ b/packages/test-utils/src/recursively-set-data.js @@ -5,7 +5,7 @@ export function recursivelySetData(vm, target, data) { const val = data[key] const targetVal = target[key] - if (isPlainObject(val) && isPlainObject(targetVal)) { + if (isPlainObject(val) && isPlainObject(targetVal) && Object.keys(val).length > 0) { recursivelySetData(vm, targetVal, val) } else { vm.$set(target, key, val) From e304be2d3cbe257bc6b59bd519515565311bdc9c Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Mon, 5 Oct 2020 17:02:27 +0200 Subject: [PATCH 2/3] fix formatting --- packages/test-utils/src/recursively-set-data.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/test-utils/src/recursively-set-data.js b/packages/test-utils/src/recursively-set-data.js index afe10092d..99cf741e2 100644 --- a/packages/test-utils/src/recursively-set-data.js +++ b/packages/test-utils/src/recursively-set-data.js @@ -5,7 +5,11 @@ export function recursivelySetData(vm, target, data) { const val = data[key] const targetVal = target[key] - if (isPlainObject(val) && isPlainObject(targetVal) && Object.keys(val).length > 0) { + if ( + isPlainObject(val) && + isPlainObject(targetVal) && + Object.keys(val).length > 0 + ) { recursivelySetData(vm, targetVal, val) } else { vm.$set(target, key, val) From a9a98264fffe6dfc6992245802042cb98e4223b4 Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Wed, 7 Oct 2020 10:39:42 +0200 Subject: [PATCH 3/3] test --- test/specs/wrapper/setData.spec.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/specs/wrapper/setData.spec.js b/test/specs/wrapper/setData.spec.js index dfedba3ea..a7ac5681a 100644 --- a/test/specs/wrapper/setData.spec.js +++ b/test/specs/wrapper/setData.spec.js @@ -320,4 +320,29 @@ describeWithShallowAndMount('setData', mountingMethod => { await wrapper.setData({ selectedDate: testDate }) expect(wrapper.vm.selectedDate).toEqual(testDate) }) + + it('allows empty objects to be set', () => { + const TestComponent = { + data() { + return { + someKey: { someValue: true } + } + }, + render(h) { + return h('span') + } + } + + const wrapper = mountingMethod(TestComponent) + + expect(wrapper.vm.$data).toEqual({ someKey: { someValue: true } }) + + wrapper.setData({ someKey: {} }) + + expect(wrapper.vm.$data).toEqual({ someKey: {} }) + + wrapper.setData({ someKey: { someValue: false } }) + + expect(wrapper.vm.$data).toEqual({ someKey: { someValue: false } }) + }) })