File tree 4 files changed +49
-11
lines changed
4 files changed +49
-11
lines changed Original file line number Diff line number Diff line change
1
+ import { configure , fireEvent } from '..'
2
+
3
+ let originalConfig
4
+
5
+ beforeEach ( ( ) => {
6
+ configure ( oldConfig => {
7
+ originalConfig = oldConfig
8
+ return null
9
+ } )
10
+ } )
11
+
12
+ afterEach ( ( ) => {
13
+ jest . clearAllMocks ( )
14
+ configure ( originalConfig )
15
+ } )
16
+
17
+ test ( 'fireEvent calls the eventWrapper' , ( ) => {
18
+ const mockEventWrapper = jest . fn ( )
19
+ configure ( ( ) => {
20
+ return { eventWrapper : mockEventWrapper }
21
+ } )
22
+ const el = document . createElement ( 'div' )
23
+ fireEvent . click ( el )
24
+ expect ( mockEventWrapper ) . toHaveBeenCalledWith ( expect . any ( Function ) )
25
+ expect ( mockEventWrapper ) . toHaveBeenCalledTimes ( 1 )
26
+ } )
27
+
28
+ test ( 'fireEvent has a default eventWrapper' , ( ) => {
29
+ const el = document . createElement ( 'div' )
30
+ expect ( ( ) => fireEvent . click ( el ) ) . not . toThrow ( )
31
+ } )
Original file line number Diff line number Diff line change @@ -14,6 +14,7 @@ let config = {
14
14
// react-testing-library to use. For that reason, this feature will remain
15
15
// undocumented.
16
16
asyncWrapper : cb => cb ( ) ,
17
+ eventWrapper : cb => cb ( ) ,
17
18
// default value for the `hidden` option in `ByRole` queries
18
19
defaultHidden : false ,
19
20
// showOriginalStackTrace flag to show the full error stack traces for async errors
Original file line number Diff line number Diff line change
1
+ import { getConfig } from './config'
1
2
import { getWindowFromNode } from './helpers'
2
3
import { eventMap , eventAliasMap } from './event-map'
3
4
4
5
function fireEvent ( element , event ) {
5
- if ( ! event ) {
6
- throw new Error ( `Unable to fire an event - please provide an event object.` )
7
- }
8
- if ( ! element ) {
9
- throw new Error (
10
- `Unable to fire a "${ event . type } " event - please provide a DOM element.` ,
11
- )
12
- }
13
- return element . dispatchEvent ( event )
6
+ return getConfig ( ) . eventWrapper ( ( ) => {
7
+ if ( ! event ) {
8
+ throw new Error (
9
+ `Unable to fire an event - please provide an event object.` ,
10
+ )
11
+ }
12
+ if ( ! element ) {
13
+ throw new Error (
14
+ `Unable to fire a "${ event . type } " event - please provide a DOM element.` ,
15
+ )
16
+ }
17
+ return element . dispatchEvent ( event )
18
+ } )
14
19
}
15
20
16
21
const createEvent = { }
@@ -64,11 +69,11 @@ Object.keys(eventMap).forEach(key => {
64
69
/* istanbul ignore if */
65
70
if ( typeof window . DataTransfer === 'function' ) {
66
71
Object . defineProperty ( event , 'dataTransfer' , {
67
- value : Object . assign ( new window . DataTransfer ( ) , dataTransfer )
72
+ value : Object . assign ( new window . DataTransfer ( ) , dataTransfer ) ,
68
73
} )
69
74
} else {
70
75
Object . defineProperty ( event , 'dataTransfer' , {
71
- value : dataTransfer
76
+ value : dataTransfer ,
72
77
} )
73
78
}
74
79
}
Original file line number Diff line number Diff line change 1
1
export interface Config {
2
2
testIdAttribute : string ;
3
3
asyncWrapper ( cb : ( ...args : any [ ] ) => any ) : Promise < any > ;
4
+ eventWrapper ( cb : ( ...args : any [ ] ) => any ) : void ;
4
5
asyncUtilTimeout : number ;
5
6
defaultHidden : boolean ;
6
7
throwSuggestions : boolean ;
You can’t perform that action at this time.
0 commit comments