diff --git a/packages/test-utils/src/recursively-set-data.js b/packages/test-utils/src/recursively-set-data.js
index e76a54612..9ad68533d 100644
--- a/packages/test-utils/src/recursively-set-data.js
+++ b/packages/test-utils/src/recursively-set-data.js
@@ -1,10 +1,12 @@
import { isPlainObject } from 'shared/validators'
-export function recursivelySetData (vm, target, obj) {
- Object.keys(obj).forEach(key => {
- const val = obj[key]
- if (isPlainObject(val)) {
- recursivelySetData(vm, target[key], val)
+export function recursivelySetData (vm, target, data) {
+ Object.keys(data).forEach(key => {
+ const val = data[key]
+ const targetVal = target[key]
+
+ if (isPlainObject(val) && isPlainObject(targetVal)) {
+ recursivelySetData(vm, targetVal, val)
} else {
vm.$set(target, key, val)
}
diff --git a/test/specs/wrapper/setData.spec.js b/test/specs/wrapper/setData.spec.js
index 41e3f97ac..1af53de54 100644
--- a/test/specs/wrapper/setData.spec.js
+++ b/test/specs/wrapper/setData.spec.js
@@ -190,6 +190,53 @@ describeWithShallowAndMount('setData', mountingMethod => {
expect(wrapper.vm.anObject.propA.prop2).to.equal('b')
})
+ it('handles undefined values', () => {
+ const TestComponent = {
+ template: `
+
+ {{undefinedProperty && undefinedProperty.foo}}
+
+ `,
+ data: () => ({
+ undefinedProperty: undefined
+ })
+ }
+ const wrapper = mountingMethod(TestComponent)
+ wrapper.setData({
+ undefinedProperty: {
+ foo: 'baz'
+ }
+ })
+ expect(wrapper.text()).to.contain('baz')
+ })
+
+ it('handles null values', () => {
+ const TestComponent = {
+ template: `
+ {{nullProperty && nullProperty.foo}}
+ `,
+ data: () => ({
+ nullProperty: null
+ })
+ }
+ const wrapper = mountingMethod(TestComponent)
+ wrapper.setData({
+ nullProperty: {
+ foo: 'bar',
+ another: null
+ }
+ })
+ expect(wrapper.text()).to.contain('bar')
+ wrapper.setData({
+ nullProperty: {
+ another: {
+ obj: true
+ }
+ }
+ })
+ expect(wrapper.vm.nullProperty.another.obj).to.equal(true)
+ })
+
it('does not merge arrays', () => {
const TestComponent = {
template: '{{nested.nested.nestedArray[0]}}
',
diff --git a/test/specs/wrapper/setMethods.spec.js b/test/specs/wrapper/setMethods.spec.js
index 8eef77da6..b6457b181 100644
--- a/test/specs/wrapper/setMethods.spec.js
+++ b/test/specs/wrapper/setMethods.spec.js
@@ -6,7 +6,7 @@ import { describeWithShallowAndMount } from '~resources/utils'
describeWithShallowAndMount('setMethods', mountingMethod => {
it('sets component data and updates nested vm nodes when called on Vue instance', () => {
const wrapper = mountingMethod(ComponentWithMethods)
- const someMethod = () => console.log('hey')
+ const someMethod = () => {}
wrapper.setMethods({ someMethod })
expect(wrapper.vm.someMethod).to.equal(someMethod)
})
@@ -25,7 +25,7 @@ describeWithShallowAndMount('setMethods', mountingMethod => {
wrapper.find('.toggle').trigger('click')
expect(wrapper.vm.isActive).to.be.true
// Replace the toggle function so that the data supposedly won't change
- const toggleActive = () => console.log('overriden')
+ const toggleActive = () => {}
wrapper.setMethods({ toggleActive })
wrapper.find('.toggle').trigger('click')
expect(wrapper.vm.isActive).to.be.true