@@ -3,44 +3,153 @@ import { defineComponent, h, ref } from 'vue'
3
3
import { mount } from '../src'
4
4
5
5
describe ( 'trigger' , ( ) => {
6
- it ( 'works on the root element' , async ( ) => {
7
- const Component = defineComponent ( {
8
- setup ( ) {
9
- return {
10
- count : ref ( 0 )
11
- }
12
- } ,
13
6
14
- render ( ) {
15
- return h ( 'div' , { onClick : ( ) => this . count ++ } , `Count: ${ this . count } ` )
16
- }
7
+ describe ( 'on click' , ( ) => {
8
+ it ( 'works on the root element' , async ( ) => {
9
+ const Component = defineComponent ( {
10
+ setup ( ) {
11
+ return {
12
+ count : ref ( 0 )
13
+ }
14
+ } ,
15
+
16
+ render ( ) {
17
+ return h ( 'div' , { onClick : ( ) => this . count ++ } , `Count: ${ this . count } ` )
18
+ }
19
+ } )
20
+
21
+ const wrapper = mount ( Component )
22
+ await wrapper . trigger ( 'click' )
23
+
24
+ expect ( wrapper . text ( ) ) . toBe ( 'Count: 1' )
25
+ } )
26
+
27
+ it ( 'works on a nested element' , async ( ) => {
28
+ const Component = defineComponent ( {
29
+ setup ( ) {
30
+ return {
31
+ count : ref ( 0 )
32
+ }
33
+ } ,
34
+
35
+ render ( ) {
36
+ return h ( 'div' , { } , [
37
+ h ( 'p' , { } , `Count: ${ this . count } ` ) ,
38
+ h ( 'button' , { onClick : ( ) => this . count ++ } )
39
+ ] )
40
+ }
41
+ } )
42
+
43
+ const wrapper = mount ( Component )
44
+ await wrapper . find ( 'button' ) . trigger ( 'click' )
45
+
46
+ expect ( wrapper . find ( 'p' ) . text ( ) ) . toBe ( 'Count: 1' )
17
47
} )
18
48
19
- const wrapper = mount ( Component )
20
- await wrapper . trigger ( 'click' )
49
+ it ( 'causes DOM to update after a click handler method that changes components data is called' , async ( ) => {
50
+ const Component = defineComponent ( {
51
+ setup ( ) {
52
+ return {
53
+ isActive : ref ( false )
54
+ }
55
+ } ,
21
56
22
- expect ( wrapper . text ( ) ) . toBe ( 'Count: 1' )
57
+ render ( ) {
58
+ return h ( 'div' , {
59
+ onClick : ( ) => this . isActive = ! this . isActive ,
60
+ class : { active : this . isActive }
61
+ } )
62
+ }
63
+ } )
64
+ const wrapper = mount ( Component , { } )
65
+
66
+ expect ( wrapper . classes ( ) ) . not . toContain ( 'active' )
67
+ await wrapper . trigger ( 'click' )
68
+ expect ( wrapper . classes ( ) ) . toContain ( 'active' )
69
+ } )
23
70
} )
24
71
25
- it ( 'works on a nested element' , async ( ) => {
26
- const Component = defineComponent ( {
27
- setup ( ) {
28
- return {
29
- count : ref ( 0 )
30
- }
31
- } ,
72
+ describe ( 'on keydown' , ( ) => {
73
+ it ( 'causes keydown handler to fire when "keydown" is triggered' , async ( ) => {
74
+ const keydownHandler = jest . fn ( )
75
+ const Component = {
76
+ template : '<input @keydown="keydownHandler" />' ,
77
+ methods : {
78
+ keydownHandler
79
+ } ,
80
+ }
81
+ const wrapper = mount ( Component , { } )
82
+ await wrapper . trigger ( 'keydown' )
83
+
84
+ expect ( keydownHandler ) . toHaveBeenCalledTimes ( 1 )
85
+ } )
86
+
87
+ it ( 'causes keydown handler to fire when "keydown.enter" is triggered' , async ( ) => {
88
+ const keydownHandler = jest . fn ( )
89
+ const Component = {
90
+ template : '<input @keydown.enter="keydownHandler" />' ,
91
+ methods : {
92
+ keydownHandler
93
+ } ,
94
+ }
95
+ const wrapper = mount ( Component , { } )
96
+ await wrapper . trigger ( 'keydown' , { key : 'Enter' } )
97
+
98
+ expect ( keydownHandler ) . toHaveBeenCalledTimes ( 1 )
99
+ } )
32
100
33
- render ( ) {
34
- return h ( 'div' , { } , [
35
- h ( 'p' , { } , `Count: ${ this . count } ` ) ,
36
- h ( 'button' , { onClick : ( ) => this . count ++ } )
37
- ] )
101
+ it ( 'causes keydown handler to fire with the appropiate keyCode when wrapper.trigger("keydown", { keyCode: 65 }) is fired' , async ( ) => {
102
+ const keydownHandler = jest . fn ( )
103
+ const Component = {
104
+ template : '<input @keydown="keydownHandler" />' ,
105
+ methods : {
106
+ keydownHandler
107
+ } ,
38
108
}
109
+ const wrapper = mount ( Component , { } )
110
+ await wrapper . trigger ( 'keydown' , { keyCode : 65 } )
111
+
112
+ expect ( keydownHandler ) . toHaveBeenCalledTimes ( 1 )
113
+ expect ( keydownHandler . mock . calls [ 0 ] [ 0 ] [ 'keyCode' ] ) . toBe ( 65 )
39
114
} )
40
115
41
- const wrapper = mount ( Component )
42
- await wrapper . find ( 'button' ) . trigger ( 'click' )
116
+ it ( 'causes keydown handler to fire converting keyName in an apropiate keyCode when wrapper.trigger("keydown.${keyName}") is fired' , async ( ) => {
117
+ let keydownHandler = jest . fn ( )
118
+
119
+ const keyCodesByKeyName = {
120
+ backspace : 8 ,
121
+ tab : 9 ,
122
+ enter : 13 ,
123
+ esc : 27 ,
124
+ space : 32 ,
125
+ pageup : 33 ,
126
+ pagedown : 34 ,
127
+ end : 35 ,
128
+ home : 36 ,
129
+ left : 37 ,
130
+ up : 38 ,
131
+ right : 39 ,
132
+ down : 40 ,
133
+ insert : 45 ,
134
+ delete : 46
135
+ }
43
136
44
- expect ( wrapper . find ( 'p' ) . text ( ) ) . toBe ( 'Count: 1' )
137
+ const Component = {
138
+ template : '<input @keydown="keydownHandler" />' ,
139
+ methods : {
140
+ keydownHandler
141
+ } ,
142
+ }
143
+ const wrapper = mount ( Component , { } )
144
+
145
+ for ( const keyName in keyCodesByKeyName ) {
146
+ const keyCode = keyCodesByKeyName [ keyName ]
147
+ wrapper . trigger ( `keydown.${ keyName } ` )
148
+
149
+ const calls = keydownHandler . mock . calls
150
+ expect ( calls [ calls . length - 1 ] [ 0 ] . keyCode ) . toEqual ( keyCode )
151
+ }
152
+ } )
45
153
} )
46
154
} )
155
+
0 commit comments