diff --git a/packages/test-utils/src/wrapper.js b/packages/test-utils/src/wrapper.js
index 308e0f4f7..19ff58142 100644
--- a/packages/test-utils/src/wrapper.js
+++ b/packages/test-utils/src/wrapper.js
@@ -397,15 +397,18 @@ export default class Wrapper implements BaseWrapper {
if (!this.vm) {
throwError('wrapper.props() must be called on a Vue instance')
}
- // $props object does not exist in Vue 2.1.x, so use $options.propsData instead
- let _props
- if (this.vm && this.vm.$options && this.vm.$options.propsData) {
- _props = this.vm.$options.propsData
- } else {
- // $FlowIgnore
- _props = this.vm.$props
+
+ const props = {}
+ // $FlowIgnore
+ const keys = this.vm.$options._propKeys
+
+ if (keys) {
+ keys.forEach(key => {
+ // $FlowIgnore
+ props[key] = this.vm[key]
+ })
}
- return _props || {} // Return an empty object if no props exist
+ return props
}
/**
@@ -515,26 +518,21 @@ export default class Wrapper implements BaseWrapper {
if (this.isFunctionalComponent) {
throwError('wrapper.setProps() cannot be called on a functional component')
}
- if (!this.isVueInstance() || !this.vm) {
+ if (!this.isVm) {
throwError('wrapper.setProps() can only be called on a Vue instance')
}
- if (this.vm && this.vm.$options && !this.vm.$options.propsData) {
- this.vm.$options.propsData = {}
- }
+
Object.keys(data).forEach((key) => {
// Ignore properties that were not specified in the component options
// $FlowIgnore : Problem with possibly null this.vm
- if (!this.vm.$options._propKeys || !this.vm.$options._propKeys.some(prop => prop === key)) {
+ if (!this.vm.$options._propKeys ||
+ !this.vm.$options._propKeys.some(prop => prop === key)) {
throwError(`wrapper.setProps() called with ${key} property which is not defined on component`)
}
// $FlowIgnore : Problem with possibly null this.vm
if (this.vm._props) {
this.vm._props[key] = data[key]
- // $FlowIgnore : Problem with possibly null this.vm.$props
- this.vm.$props[key] = data[key]
- // $FlowIgnore : Problem with possibly null this.vm.$options
- this.vm.$options.propsData[key] = data[key]
} else {
// $FlowIgnore : Problem with possibly null this.vm
this.vm[key] = data[key]
diff --git a/scripts/test-compat-all.sh b/scripts/test-compat-all.sh
new file mode 100755
index 000000000..8ee30c633
--- /dev/null
+++ b/scripts/test-compat-all.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+set -e
+
+scripts/test-compat.sh "2.0.8"
+scripts/test-compat.sh "2.1.10"
+scripts/test-compat.sh "2.2.6"
+scripts/test-compat.sh "2.3.4"
+scripts/test-compat.sh "2.4.2"
+scripts/test-compat.sh "2.5.13"
\ No newline at end of file
diff --git a/test/specs/components/RouterLink.spec.js b/test/specs/components/RouterLink.spec.js
index 628bc7ad2..c3c617467 100644
--- a/test/specs/components/RouterLink.spec.js
+++ b/test/specs/components/RouterLink.spec.js
@@ -8,13 +8,13 @@ describeWithShallowAndMount('RouterLinkStub', (mountingMethod) => {
`
@@ -24,12 +24,13 @@ describeWithShallowAndMount('RouterLinkStub', (mountingMethod) => {
RouterLink: RouterLinkStub
}
})
+
const routerLink = wrapper.find(RouterLinkStub)
expect(routerLink.props().to).to.equal('to1')
- expect(routerLink.props().tag).to.equal('tag1')
- expect(routerLink.props().exact).to.equal('exact1')
- expect(routerLink.props().append).to.equal('append1')
- expect(routerLink.props().replace).to.equal('replace1')
+ expect(routerLink.props().tag).to.equal('a')
+ expect(routerLink.props().exact).to.equal(true)
+ expect(routerLink.props().append).to.equal(true)
+ expect(routerLink.props().replace).to.equal(true)
expect(routerLink.props().activeClass).to.equal('activeClass1')
expect(routerLink.props().exactActiveClass).to.equal('exactActiveClass1')
expect(routerLink.props().event).to.equal('event1')
@@ -39,7 +40,7 @@ describeWithShallowAndMount('RouterLinkStub', (mountingMethod) => {
const TestComponent = {
template: `
- some text
+ some text
`
}
diff --git a/test/specs/mounting-options/localVue.spec.js b/test/specs/mounting-options/localVue.spec.js
index 1410251f7..bb1c2fe30 100644
--- a/test/specs/mounting-options/localVue.spec.js
+++ b/test/specs/mounting-options/localVue.spec.js
@@ -15,7 +15,8 @@ describeWithMountingMethods('options.localVue', (mountingMethod) => {
const TestComponent = {
template: `
{{test}}
- `
+ `,
+ data: { test: '' }
}
const localVue = Vue.extend()
localVue.version = '2.3'
diff --git a/test/specs/wrapper/destroy.spec.js b/test/specs/wrapper/destroy.spec.js
index b752f3000..a66e7721b 100644
--- a/test/specs/wrapper/destroy.spec.js
+++ b/test/specs/wrapper/destroy.spec.js
@@ -3,10 +3,10 @@ import { describeWithShallowAndMount } from '~resources/utils'
import sinon from 'sinon'
describeWithShallowAndMount('destroy', (mountingMethod) => {
- it('should trigger beforeDestroy ', () => {
+ it('triggers beforeDestroy ', () => {
const spy = sinon.stub()
mountingMethod({
- render: null,
+ render: () => {},
beforeDestroy () {
spy()
}
@@ -14,10 +14,10 @@ describeWithShallowAndMount('destroy', (mountingMethod) => {
expect(spy.calledOnce).to.equal(true)
})
- it('should trigger destroy ', () => {
+ it('triggers destroy ', () => {
const spy = sinon.stub()
mountingMethod({
- render: null,
+ render: () => {},
destroyed () {
spy()
}
@@ -25,7 +25,7 @@ describeWithShallowAndMount('destroy', (mountingMethod) => {
expect(spy.calledOnce).to.equal(true)
})
- it.skip('should remove element from document.body', () => {
+ it.skip('removes element from document.body', () => {
const compiled = compileToFunctions('')
const wrapper = mountingMethod(compiled, { attachToDocument: true })
expect(wrapper.vm.$el.parentNode).to.equal(document.body)
diff --git a/test/specs/wrapper/emitted.spec.js b/test/specs/wrapper/emitted.spec.js
index 7f28353d9..da0a98930 100644
--- a/test/specs/wrapper/emitted.spec.js
+++ b/test/specs/wrapper/emitted.spec.js
@@ -63,7 +63,8 @@ describeWithShallowAndMount('emitted', (mountingMethod) => {
},
mounted () {
this.$emit('bar', 1, 2)
- }
+ },
+ render: () => {}
})
expect(wrapper.emitted().foo).to.eql([[]])
@@ -74,12 +75,14 @@ describeWithShallowAndMount('emitted', (mountingMethod) => {
const localVue = createLocalVue()
const wrapper1 = mountingMethod({
+ render: () => {},
beforeCreate () {
this.$emit('foo')
}
}, { localVue })
const wrapper2 = mountingMethod({
+ render: () => {},
mounted () {
this.$emit('bar')
}
diff --git a/test/specs/wrapper/find.spec.js b/test/specs/wrapper/find.spec.js
index a4c7c281e..bf5e7ea22 100644
--- a/test/specs/wrapper/find.spec.js
+++ b/test/specs/wrapper/find.spec.js
@@ -240,7 +240,7 @@ describeWithShallowAndMount('find', (mountingMethod) => {
it('returns error Wrapper if Vue component is below Wrapper', () => {
const AComponent = {
render: () => {},
- name: 'a component'
+ name: 'a-component'
}
const localVue = createLocalVue()
localVue.component('a-component', AComponent)
diff --git a/test/specs/wrapper/hasClass.spec.js b/test/specs/wrapper/hasClass.spec.js
index 88ecd3fb1..b846a2cae 100644
--- a/test/specs/wrapper/hasClass.spec.js
+++ b/test/specs/wrapper/hasClass.spec.js
@@ -40,13 +40,6 @@ describeWithShallowAndMount('hasClass', (mountingMethod) => {
expect(wrapper.hasClass('color-red')).to.equal(true)
})
- it('returns false if wrapper does not contain element', () => {
- const wrapper = mountingMethod({ render: (h) => h('div.a-class.b-class') })
- const div = wrapper.find('div')
- div.element = null
- expect(wrapper.hasClass('a-class b-class')).to.equal(false)
- })
-
it('returns true when the element contains multiple classes', () => {
const compiled = compileToFunctions('')
const wrapper = mountingMethod(compiled)
diff --git a/test/specs/wrapper/props.spec.js b/test/specs/wrapper/props.spec.js
index c325c76dc..731498507 100644
--- a/test/specs/wrapper/props.spec.js
+++ b/test/specs/wrapper/props.spec.js
@@ -36,6 +36,19 @@ describeWithShallowAndMount('props', (mountingMethod) => {
expect(wrapper.props()).to.eql({ prop1: {}, prop2: 'val2' }) // fail
})
+ it('returns default props', () => {
+ const TestComponent = {
+ render: () => {},
+ props: {
+ message: {
+ default: () => 'hello'
+ }
+ }
+ }
+ const wrapper = mountingMethod(TestComponent)
+ expect(wrapper.props().message).to.equal('hello')
+ })
+
itSkipIf(!functionalSFCsSupported,
'works correctly a functional component', () => {
const FunctionalComponent = {
diff --git a/test/specs/wrapper/setComputed.spec.js b/test/specs/wrapper/setComputed.spec.js
index fdd491ebf..b4609f130 100644
--- a/test/specs/wrapper/setComputed.spec.js
+++ b/test/specs/wrapper/setComputed.spec.js
@@ -39,6 +39,7 @@ describeWithShallowAndMount('setComputed', (mountingMethod) => {
it('updates vm computed value', () => {
const TestComponent = {
+ render: () => {},
data () {
return {
a: 1
diff --git a/test/specs/wrapper/setData.spec.js b/test/specs/wrapper/setData.spec.js
index d335ea798..d5f69a82d 100644
--- a/test/specs/wrapper/setData.spec.js
+++ b/test/specs/wrapper/setData.spec.js
@@ -133,7 +133,7 @@ describeWithShallowAndMount('setData', (mountingMethod) => {
expect(wrapper.text()).to.equal('There is no message yet')
})
- it('should update an existing property in a data object', () => {
+ it('updates an existing property in a data object', () => {
const TestComponent = {
data: () => ({
anObject: {
@@ -142,7 +142,8 @@ describeWithShallowAndMount('setData', (mountingMethod) => {
},
propB: 'b'
}
- })
+ }),
+ render: () => {}
}
const wrapper = mountingMethod(TestComponent)
wrapper.setData({