@@ -53,6 +53,45 @@ function render(ui, { options = {}, wrapper: WrapperComponent, queries } = {}) {
53
53
} ;
54
54
}
55
55
56
+ async function asyncRender ( ui , { options = { } , wrapper : WrapperComponent , queries } = { } ) {
57
+ const wrapUiIfNeeded = innerElement =>
58
+ WrapperComponent ? (
59
+ < AppContainer >
60
+ < WrapperComponent > { innerElement } </ WrapperComponent >
61
+ </ AppContainer >
62
+ ) : (
63
+ < AppContainer > { innerElement } </ AppContainer >
64
+ ) ;
65
+
66
+ let testRenderer ;
67
+
68
+ await act ( async ( ) => {
69
+ testRenderer = TR . create ( wrapUiIfNeeded ( ui ) , options ) ;
70
+ } ) ;
71
+
72
+ renderers . add ( testRenderer ) ;
73
+
74
+ const wrappers = proxyElement ( testRenderer . root ) . findAll ( n => n . type === 'View' ) ;
75
+ const baseElement = wrappers [ 0 ] ; // Includes YellowBox and your render
76
+ const container = wrappers [ 1 ] ; // Includes only your render
77
+
78
+ return {
79
+ baseElement,
80
+ container,
81
+ debug : ( el = baseElement ) => console . log ( prettyPrint ( el ) ) ,
82
+ unmount : ( ) => testRenderer . unmount ( ) ,
83
+ rerender : async rerenderUi => {
84
+ await act ( async ( ) => {
85
+ testRenderer . update ( wrapUiIfNeeded ( rerenderUi ) ) ;
86
+ } ) ;
87
+ } ,
88
+ asJSON : ( ) => {
89
+ return toJSON ( container ) ;
90
+ } ,
91
+ ...getQueriesForElement ( baseElement , queries ) ,
92
+ } ;
93
+ }
94
+
56
95
function cleanup ( ) {
57
96
renderers . forEach ( cleanupRenderer ) ;
58
97
}
@@ -70,6 +109,14 @@ function fireEvent(...args) {
70
109
return returnValue ;
71
110
}
72
111
112
+ async function asyncFireEvent ( ...args ) {
113
+ let returnValue ;
114
+ await act ( async ( ) => {
115
+ returnValue = rntlFireEvent ( ...args ) ;
116
+ } ) ;
117
+ return returnValue ;
118
+ }
119
+
73
120
Object . keys ( rntlFireEvent ) . forEach ( typeArg => {
74
121
fireEvent [ typeArg ] = ( ...args ) => {
75
122
let returnValue ;
@@ -80,5 +127,25 @@ Object.keys(rntlFireEvent).forEach(typeArg => {
80
127
} ;
81
128
} ) ;
82
129
130
+ Object . keys ( rntlFireEvent ) . forEach ( typeArg => {
131
+ fireEvent [ typeArg ] = ( ...args ) => {
132
+ let returnValue ;
133
+ act ( ( ) => {
134
+ returnValue = rntlFireEvent [ typeArg ] ( ...args ) ;
135
+ } ) ;
136
+ return returnValue ;
137
+ } ;
138
+ } ) ;
139
+
140
+ Object . keys ( rntlFireEvent ) . forEach ( async typeArg => {
141
+ asyncFireEvent [ typeArg ] = async ( ...args ) => {
142
+ let returnValue ;
143
+ await act ( async ( ) => {
144
+ returnValue = rntlFireEvent [ typeArg ] ( ...args ) ;
145
+ } ) ;
146
+ return returnValue ;
147
+ } ;
148
+ } ) ;
149
+
83
150
export * from './lib' ;
84
- export { act , cleanup , fireEvent , render , NativeTestEvent } ;
151
+ export { act , cleanup , fireEvent , asyncFireEvent , render , asyncRender , NativeTestEvent } ;
0 commit comments