@@ -77,43 +77,65 @@ describe('trigger', () => {
77
77
const keydownHandler = jest . fn ( )
78
78
const Component = {
79
79
template : '<input @keydown="keydownHandler" />' ,
80
- methods : {
81
- keydownHandler
82
- }
80
+ methods : { keydownHandler }
83
81
}
84
82
const wrapper = mount ( Component , { } )
85
- await wrapper . trigger ( 'keydown' )
86
83
84
+ // is not fired when a diferent event is triggered
85
+ await wrapper . trigger ( 'click' )
86
+ expect ( keydownHandler ) . not . toHaveBeenCalled ( )
87
+
88
+ // is called when 'keydown' is triggered
89
+ await wrapper . trigger ( 'keydown' )
87
90
expect ( keydownHandler ) . toHaveBeenCalledTimes ( 1 )
91
+
92
+ // is called when 'keydown' is triggered with a modificator
93
+ await wrapper . trigger ( 'keydown.enter' )
94
+ expect ( keydownHandler ) . toHaveBeenCalledTimes ( 2 )
95
+
96
+ // is called when 'keydown' is triggered with an option
97
+ await wrapper . trigger ( 'keydown' , { key : 'K' } )
98
+ expect ( keydownHandler ) . toHaveBeenCalledTimes ( 3 )
88
99
} )
89
100
90
101
it ( 'causes keydown handler to fire when "keydown.enter" is triggered' , async ( ) => {
91
102
const keydownHandler = jest . fn ( )
92
103
const Component = {
93
104
template : '<input @keydown.enter="keydownHandler" />' ,
94
- methods : {
95
- keydownHandler
96
- }
105
+ methods : { keydownHandler }
97
106
}
98
107
const wrapper = mount ( Component , { } )
99
- await wrapper . trigger ( 'keydown' , { key : 'Enter' } )
100
108
109
+ // is not called when key is not 'enter'
110
+ await wrapper . trigger ( 'keydown' , { key : 'Backspace' } )
111
+ expect ( keydownHandler ) . not . toHaveBeenCalled ( )
112
+
113
+ // is not called when key is uppercase 'ENTER'
114
+ await wrapper . trigger ( 'keydown' , { key : 'ENTER' } )
115
+ expect ( keydownHandler ) . not . toHaveBeenCalled ( )
116
+
117
+ // is called when key is lowercase 'enter'
118
+ await wrapper . trigger ( 'keydown' , { key : 'enter' } )
101
119
expect ( keydownHandler ) . toHaveBeenCalledTimes ( 1 )
120
+ expect ( keydownHandler . mock . calls [ 0 ] [ 0 ] . key ) . toBe ( 'enter' )
121
+
122
+ // is called when key is titlecase 'Enter'
123
+ await wrapper . trigger ( 'keydown' , { key : 'Enter' } )
124
+ expect ( keydownHandler ) . toHaveBeenCalledTimes ( 2 )
125
+ expect ( keydownHandler . mock . calls [ 1 ] [ 0 ] . key ) . toBe ( 'Enter' )
102
126
} )
103
127
104
128
it ( 'causes keydown handler to fire with the appropiate keyCode when wrapper.trigger("keydown", { keyCode: 65 }) is fired' , async ( ) => {
105
129
const keydownHandler = jest . fn ( )
106
130
const Component = {
107
131
template : '<input @keydown="keydownHandler" />' ,
108
- methods : {
109
- keydownHandler
110
- }
132
+ methods : { keydownHandler }
111
133
}
112
134
const wrapper = mount ( Component , { } )
113
135
await wrapper . trigger ( 'keydown' , { keyCode : 65 } )
114
136
115
137
expect ( keydownHandler ) . toHaveBeenCalledTimes ( 1 )
116
- expect ( keydownHandler . mock . calls [ 0 ] [ 0 ] [ ' keyCode' ] ) . toBe ( 65 )
138
+ expect ( keydownHandler . mock . calls [ 0 ] [ 0 ] . keyCode ) . toBe ( 65 )
117
139
} )
118
140
119
141
it ( 'causes keydown handler to fire converting keyName in an apropiate keyCode when wrapper.trigger("keydown.${keyName}") is fired' , async ( ) => {
@@ -139,9 +161,7 @@ describe('trigger', () => {
139
161
140
162
const Component = {
141
163
template : '<input @keydown="keydownHandler" />' ,
142
- methods : {
143
- keydownHandler
144
- }
164
+ methods : { keydownHandler }
145
165
}
146
166
const wrapper = mount ( Component , { } )
147
167
@@ -150,8 +170,113 @@ describe('trigger', () => {
150
170
wrapper . trigger ( `keydown.${ keyName } ` )
151
171
152
172
const calls = keydownHandler . mock . calls
153
- expect ( calls [ calls . length - 1 ] [ 0 ] . keyCode ) . toEqual ( keyCode )
173
+ const currentCall = calls [ calls . length - 1 ] [ 0 ]
174
+
175
+ // expect(currentCall.key).toBe('')
176
+ expect ( currentCall . keyCode ) . toBe ( keyCode )
177
+ // expect(currentCall.code).toBe(keyCode.toString())
154
178
}
155
179
} )
156
180
} )
181
+
182
+ describe ( 'on disabled elements' , ( ) => {
183
+ it ( 'does not fires when trigger is called on a valid disabled element' , async ( ) => {
184
+ const validElementsToBeDisabled = [
185
+ 'button' ,
186
+ 'fieldset' ,
187
+ 'optgroup' ,
188
+ 'option' ,
189
+ 'select' ,
190
+ 'textarea' ,
191
+ 'input'
192
+ ]
193
+
194
+ for ( let element of validElementsToBeDisabled ) {
195
+ const clickHandler = jest . fn ( )
196
+ const Component = {
197
+ template : `<${ element } disabled @click="clickHandler" />` ,
198
+ methods : { clickHandler }
199
+ }
200
+ const wrapper = mount ( Component , { } )
201
+ await wrapper . trigger ( 'click' )
202
+
203
+ expect ( clickHandler ) . not . toHaveBeenCalled ( )
204
+ }
205
+ } )
206
+
207
+ it ( 'is fired when trigger is called on a element set as disabled but who is invalid to be disabled' , async ( ) => {
208
+ const invalidElementsToBeDisabled = [ 'div' , 'span' , 'a' ]
209
+
210
+ for ( let element of invalidElementsToBeDisabled ) {
211
+ const clickHandler = jest . fn ( )
212
+ const Component = {
213
+ template : `<${ element } disabled @click="clickHandler" />` ,
214
+ methods : { clickHandler }
215
+ }
216
+ const wrapper = mount ( Component , { } )
217
+ await wrapper . trigger ( 'click' )
218
+
219
+ expect ( clickHandler ) . toHaveBeenCalledTimes ( 1 )
220
+ }
221
+ } )
222
+ } )
223
+
224
+ describe ( 'event modifiers' , ( ) => {
225
+ const eventModifiers = [
226
+ 'stop' ,
227
+ 'prevent' ,
228
+ 'capture' ,
229
+ 'self' ,
230
+ 'once' ,
231
+ 'passive'
232
+ ]
233
+ for ( let modifier of eventModifiers ) {
234
+ it ( `handles .${ modifier } ` , async ( ) => {
235
+ const keydownHandler = jest . fn ( )
236
+ const Component = {
237
+ template : `<input @keydown.${ modifier } ="keydownHandler" />` ,
238
+ methods : { keydownHandler }
239
+ }
240
+ const wrapper = mount ( Component , { } )
241
+
242
+ await wrapper . trigger ( 'keydown' )
243
+
244
+ expect ( keydownHandler ) . toHaveBeenCalledTimes ( 1 )
245
+ } )
246
+ }
247
+ } )
248
+
249
+ describe ( 'custom data' , ( ) => {
250
+ it ( 'adds custom data to events' , ( ) => {
251
+ const updateHandler = jest . fn ( )
252
+ const Component = {
253
+ template : '<div @update="updateHandler" />' ,
254
+ methods : { updateHandler }
255
+ }
256
+ const wrapper = mount ( Component , { } )
257
+
258
+ wrapper . trigger ( 'update' , { customData : 123 } )
259
+ expect ( updateHandler ) . toHaveBeenCalledTimes ( 1 )
260
+ expect ( updateHandler . mock . calls [ 0 ] [ 0 ] . customData ) . toBe ( 123 )
261
+ } )
262
+ } )
263
+
264
+ describe ( 'errors' , ( ) => {
265
+ it ( 'throws error if options contains a target value' , ( ) => {
266
+ const expectedErrorMessage =
267
+ '[vue-test-utils]: you cannot set the target value of an event. See the notes section of the docs for more details—https://vue-test-utils.vuejs.org/api/wrapper/trigger.html'
268
+
269
+ const clickHandler = jest . fn ( )
270
+ const Component = {
271
+ template : '<div @click="clickHandler" />' ,
272
+ methods : { clickHandler }
273
+ }
274
+ const wrapper = mount ( Component , { } )
275
+
276
+ const fn = wrapper . trigger ( 'click' , { target : 'something' } )
277
+ expect ( fn ) . rejects . toThrowError ( expectedErrorMessage )
278
+
279
+ expect ( clickHandler ) . not . toHaveBeenCalled ( )
280
+ } )
281
+ } )
157
282
} )
0 commit comments