Skip to content

Commit f63eda2

Browse files
committed
test: fix Wrapper.setChecked() test compatibility
Older versions of Vue use the `click` DOM event for updating radio/checkbox `v-model`s.
1 parent 562bf11 commit f63eda2

File tree

1 file changed

+65
-37
lines changed

1 file changed

+65
-37
lines changed

Diff for: test/specs/wrapper/setChecked.spec.js

+65-37
Original file line numberDiff line numberDiff line change
@@ -56,26 +56,41 @@ describeWithShallowAndMount('setChecked', mountingMethod => {
5656
})
5757

5858
it('should trigger a change event when called on a checkbox', () => {
59-
const listeners = { change: sinon.spy() }
60-
61-
mountingMethod(
62-
{ template: `<input type="checkbox" v-on="$listeners">` },
63-
{ listeners },
64-
).setChecked()
65-
66-
expect(listeners.change).to.have.been.called
67-
});
59+
const listener = sinon.spy()
60+
61+
mountingMethod({
62+
// For compatibility with earlier versions of Vue that use the `click`
63+
// event for updating `v-model`.
64+
template: `
65+
<input
66+
type="checkbox"
67+
@change="listener"
68+
@click="listener"
69+
>
70+
`,
71+
methods: { listener },
72+
}).setChecked()
73+
74+
expect(listener).to.have.been.called
75+
})
6876

6977
it('should not trigger a change event if the checkbox is already checked', () => {
70-
const listeners = { change: sinon.spy() }
71-
72-
mountingMethod(
73-
{ template: `<input type="checkbox" checked v-on="$listeners">` },
74-
{ listeners },
75-
).setChecked()
76-
77-
expect(listeners.change).not.to.have.been.called
78-
});
78+
const listener = sinon.spy()
79+
80+
mountingMethod({
81+
template: `
82+
<input
83+
type="checkbox"
84+
checked
85+
@change="listener"
86+
@click="listener"
87+
>
88+
`,
89+
methods: { listener },
90+
}).setChecked()
91+
92+
expect(listener).not.to.have.been.called
93+
})
7994

8095
it('updates dom with radio v-model', async () => {
8196
const wrapper = mountingMethod(ComponentWithInput)
@@ -112,26 +127,39 @@ describeWithShallowAndMount('setChecked', mountingMethod => {
112127
})
113128

114129
it('should trigger a change event when called on a radio button', () => {
115-
const listeners = { change: sinon.spy() }
116-
117-
mountingMethod(
118-
{ template: `<input type="radio" v-on="$listeners">` },
119-
{ listeners },
120-
).setChecked()
121-
122-
expect(listeners.change).to.have.been.called
123-
});
124-
125-
it('should not trigger a change event if the radio button is already selected', () => {
126-
const listeners = { change: sinon.spy() }
127-
128-
mountingMethod(
129-
{ template: `<input type="radio" checked v-on="$listeners">` },
130-
{ listeners },
131-
).setChecked()
130+
const listener = sinon.spy()
131+
132+
mountingMethod({
133+
template: `
134+
<input
135+
type="radio"
136+
@change="listener"
137+
@click="listener"
138+
>
139+
`,
140+
methods: { listener },
141+
}).setChecked()
142+
143+
expect(listener).to.have.been.called
144+
})
132145

133-
expect(listeners.change).not.to.have.been.called
134-
});
146+
it('should not trigger a change event if the radio button is already checked', () => {
147+
const listener = sinon.spy()
148+
149+
mountingMethod({
150+
template: `
151+
<input
152+
type="radio"
153+
checked
154+
@change="listener"
155+
@click="listener"
156+
>
157+
`,
158+
methods: { listener },
159+
}).setChecked()
160+
161+
expect(listener).not.to.have.been.called
162+
})
135163

136164
it('throws error if checked param is not boolean', () => {
137165
const message = 'wrapper.setChecked() must be passed a boolean'

0 commit comments

Comments
 (0)