From 4473d2e620f6650ca640e7f7605ee8d372a88ba1 Mon Sep 17 00:00:00 2001 From: briwa Date: Tue, 15 May 2018 23:26:09 +0800 Subject: [PATCH 1/3] fix: clone propsData to avoid mutation --- packages/create-instance/create-instance.js | 2 +- test/specs/mounting-options/propsData.spec.js | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 test/specs/mounting-options/propsData.spec.js diff --git a/packages/create-instance/create-instance.js b/packages/create-instance/create-instance.js index 6236fe243..80fa5594d 100644 --- a/packages/create-instance/create-instance.js +++ b/packages/create-instance/create-instance.js @@ -57,7 +57,7 @@ export default function createInstance ( const Constructor = vue.extend(component) - const instanceOptions = { ...options } + const instanceOptions = { ...options, propsData : { ...options.propsData } } deleteoptions(instanceOptions) // $FlowIgnore const stubComponents = createComponentStubs(component.components, options.stubs) diff --git a/test/specs/mounting-options/propsData.spec.js b/test/specs/mounting-options/propsData.spec.js new file mode 100644 index 000000000..c3f7d889b --- /dev/null +++ b/test/specs/mounting-options/propsData.spec.js @@ -0,0 +1,34 @@ +import { shallowMount } from '~vue/test-utils' +import ComponentWithProps from '~resources/components/component-with-props.vue' +import { describeIf } from '~resources/utils' + +const baseData = { + prop1: ['', ''] +} + +describeIf(process.env.TEST_ENV !== 'node', + 'propsData', () => { + let wrapper + + beforeEach(() => { + wrapper = shallowMount(ComponentWithProps, { + propsData : baseData, + }) + }) + + afterEach(() => { + wrapper = null + }) + + describe('should not modify propsData between tests', () => { + it('should have the correct props after modifying', () => { + expect(wrapper.vm.prop1).to.have.length(2) + wrapper.setProps({ prop1: [] }); + expect(wrapper.vm.prop1).to.have.length(0) + }) + + it('should have the default props despite being modified in the previous test', () => { + expect(wrapper.vm.prop1).to.have.length(2) + }) + }) + }) From 7e8b10289ad3b82440199292881e56f8ffbae79a Mon Sep 17 00:00:00 2001 From: briwa Date: Tue, 15 May 2018 23:44:15 +0800 Subject: [PATCH 2/3] refactor: linting --- packages/create-instance/create-instance.js | 2 +- test/specs/mounting-options/propsData.spec.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/create-instance/create-instance.js b/packages/create-instance/create-instance.js index 80fa5594d..49cc0889b 100644 --- a/packages/create-instance/create-instance.js +++ b/packages/create-instance/create-instance.js @@ -57,7 +57,7 @@ export default function createInstance ( const Constructor = vue.extend(component) - const instanceOptions = { ...options, propsData : { ...options.propsData } } + const instanceOptions = { ...options, propsData: { ...options.propsData }} deleteoptions(instanceOptions) // $FlowIgnore const stubComponents = createComponentStubs(component.components, options.stubs) diff --git a/test/specs/mounting-options/propsData.spec.js b/test/specs/mounting-options/propsData.spec.js index c3f7d889b..6774b2cb1 100644 --- a/test/specs/mounting-options/propsData.spec.js +++ b/test/specs/mounting-options/propsData.spec.js @@ -12,7 +12,7 @@ describeIf(process.env.TEST_ENV !== 'node', beforeEach(() => { wrapper = shallowMount(ComponentWithProps, { - propsData : baseData, + propsData: baseData }) }) @@ -23,7 +23,7 @@ describeIf(process.env.TEST_ENV !== 'node', describe('should not modify propsData between tests', () => { it('should have the correct props after modifying', () => { expect(wrapper.vm.prop1).to.have.length(2) - wrapper.setProps({ prop1: [] }); + wrapper.setProps({ prop1: [] }) expect(wrapper.vm.prop1).to.have.length(0) }) From 178f8ede2f7c507d602f36b09e0690f635ff9784 Mon Sep 17 00:00:00 2001 From: briwa Date: Wed, 16 May 2018 07:34:24 +0800 Subject: [PATCH 3/3] fix: flow type --- flow/options.flow.js | 1 + 1 file changed, 1 insertion(+) diff --git a/flow/options.flow.js b/flow/options.flow.js index bff923149..6970b117b 100644 --- a/flow/options.flow.js +++ b/flow/options.flow.js @@ -1,5 +1,6 @@ declare type Options = { // eslint-disable-line no-undef attachToDocument?: boolean, + propsData?: Object, mocks?: Object, methods?: Object, slots?: Object,