Skip to content

Commit 852d2ab

Browse files
committed
fix: use getter for element
fixes #62
1 parent dca1c1d commit 852d2ab

File tree

4 files changed

+31
-10
lines changed

4 files changed

+31
-10
lines changed

src/wrappers/vue-wrapper.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ export default class VueWrapper extends Wrapper implements BaseWrapper {
1616
get: () => vm._vnode,
1717
set: () => {}
1818
}))
19-
19+
// $FlowIgnore
20+
Object.defineProperty(this, 'element', ({
21+
get: () => vm.$el,
22+
set: () => {}
23+
}))
2024
this.vm = vm
2125
this.isVueComponent = true
2226
this._emitted = Object.create(null)

test/unit/specs/mount/Wrapper/setData.spec.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,22 @@ describe('setData', () => {
1010
expect(wrapper.findAll('.child.ready').length).to.equal(1)
1111
})
1212

13+
it('keeps element in sync with vnode', () => {
14+
const Component = {
15+
template: '<div class="some-class" v-if="show">A custom component!</div>',
16+
data () {
17+
return {
18+
show: false
19+
}
20+
}
21+
}
22+
const wrapper = mount(Component)
23+
wrapper.setData({ show: true })
24+
wrapper.update()
25+
expect(wrapper.element).to.equal(wrapper.vm.$el)
26+
expect(wrapper.hasClass('some-class')).to.be.true
27+
})
28+
1329
it('throws an error if node is not a Vue instance', () => {
1430
const message = 'wrapper.setData() can only be called on a Vue instance'
1531
const compiled = compileToFunctions('<div><p></p></div>')

test/unit/specs/mount/Wrapper/text.spec.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ describe('text', () => {
1010
expect(wrapper.text()).to.equal(text)
1111
})
1212

13-
it('throws error if wrapper does not contain elememnt', () => {
14-
const compiled = compileToFunctions(`<div />`)
15-
const wrapper = mount(compiled)
16-
wrapper.element = null
17-
const fn = () => wrapper.text()
13+
it('throws error if wrapper does not contain element', () => {
14+
const wrapper = mount({ render: (h) => h('div') })
15+
const div = wrapper.find('div')
16+
div.element = null
17+
const fn = () => div.text()
1818
const message = '[vue-test-utils]: cannot call wrapper.text() on a wrapper without an element'
1919
expect(fn).to.throw().with.property('message', message)
2020
})

test/unit/specs/mount/Wrapper/trigger.spec.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,11 @@ describe('trigger', () => {
7474
expect(info.calledWith(true)).to.equal(true)
7575
})
7676

77-
it('throws error if wrapper does not contain eleemnt', () => {
78-
const wrapper = mount({ render: () => {} })
79-
wrapper.element = null
80-
const fn = () => wrapper.trigger('click')
77+
it('throws error if wrapper does not contain element', () => {
78+
const wrapper = mount({ render: (h) => h('div') })
79+
const div = wrapper.find('div')
80+
div.element = null
81+
const fn = () => div.trigger('click')
8182
const message = '[vue-test-utils]: cannot call wrapper.trigger() on a wrapper without an element'
8283
expect(fn).to.throw().with.property('message', message)
8384
})

0 commit comments

Comments
 (0)