4
4
getQueriesForElement ,
5
5
prettyDOM ,
6
6
wait ,
7
- fireEvent
7
+ fireEvent as dtlFireEvent
8
8
} from '@testing-library/dom'
9
9
10
10
const mountedWrappers = new Set ( )
@@ -91,10 +91,16 @@ function cleanupAtWrapper(wrapper) {
91
91
mountedWrappers . delete ( wrapper )
92
92
}
93
93
94
- Object . keys ( fireEvent ) . forEach ( fn => {
95
- fireEvent [ `_${ fn } ` ] = fireEvent [ fn ]
96
- fireEvent [ fn ] = async ( ...params ) => {
97
- fireEvent [ `_${ fn } ` ] ( ...params )
94
+ // Vue Testing Library's version of fireEvent will call DOM Testing Library's
95
+ // version of fireEvent plus wait for one tick of the event loop so that...
96
+ async function fireEvent ( ...args ) {
97
+ dtlFireEvent ( ...args )
98
+ await wait ( )
99
+ }
100
+
101
+ Object . keys ( dtlFireEvent ) . forEach ( key => {
102
+ fireEvent [ key ] = async ( ...args ) => {
103
+ dtlFireEvent [ key ] ( ...args )
98
104
await wait ( )
99
105
}
100
106
} )
@@ -104,6 +110,9 @@ fireEvent.touch = async elem => {
104
110
await fireEvent . blur ( elem )
105
111
}
106
112
113
+ // Small utility to provide a better experience when working with v-model.
114
+ // Related upstream issue: https://github.com/vuejs/vue-test-utils/issues/345#issuecomment-380588199
115
+ // Examples: https://github.com/testing-library/vue-testing-library/blob/master/tests/__tests__/form.js
107
116
fireEvent . update = async ( elem , value ) => {
108
117
const tagName = elem . tagName
109
118
const type = elem . type
@@ -143,4 +152,4 @@ fireEvent.update = async (elem, value) => {
143
152
}
144
153
145
154
export * from '@testing-library/dom'
146
- export { cleanup , render }
155
+ export { cleanup , render , fireEvent }
0 commit comments