@@ -1102,7 +1102,7 @@ test('JsonForms should use react to additionalErrors update', () => {
1102
1102
wrapper . unmount ( ) ;
1103
1103
} ) ;
1104
1104
1105
- test ( 'JsonForms middleware should be called if provided' , ( ) => {
1105
+ test ( 'JsonForms middleware should be called if provided' , async ( ) => {
1106
1106
// given
1107
1107
const onChangeHandler = jest . fn ( ) ;
1108
1108
const customMiddleware = jest . fn ( ) ;
@@ -1136,31 +1136,39 @@ test('JsonForms middleware should be called if provided', () => {
1136
1136
renderers = { renderers }
1137
1137
/>
1138
1138
) ;
1139
- setTimeout ( ( ) => {
1140
- const calls = onChangeHandler . mock . calls ;
1141
- const lastCallParameter = calls [ calls . length - 1 ] [ 0 ] ;
1142
- expect ( lastCallParameter . data ) . toEqual ( { foo : 'John Doe' } ) ;
1143
- expect ( lastCallParameter . errors ) . toEqual ( [ ] ) ;
1144
- } , 50 ) ;
1145
1139
1146
- // when
1140
+ // wait for 50 ms for the change handler invocation
1141
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
1142
+
1143
+ // initial rendering should call onChange 1 time
1144
+ expect ( onChangeHandler ) . toHaveBeenCalledTimes ( 1 ) ;
1145
+ const calls = onChangeHandler . mock . calls ;
1146
+ const lastCallParameter = calls [ calls . length - 1 ] [ 0 ] ;
1147
+ expect ( lastCallParameter . data ) . toEqual ( { foo : 'John Doe' } ) ;
1148
+ expect ( lastCallParameter . errors ) . toEqual ( [ ] ) ;
1149
+
1150
+ // adapt test input
1147
1151
wrapper . find ( 'input' ) . simulate ( 'change' , {
1148
1152
target : {
1149
1153
value : 'Test Value' ,
1150
1154
} ,
1151
1155
} ) ;
1152
1156
1153
- // then
1154
1157
expect ( customMiddleware ) . toHaveBeenCalledTimes ( 1 ) ;
1155
- expect ( onChangeHandler ) . not . toHaveBeenCalled ( ) ;
1158
+
1159
+ // wait for 50 ms for the change handler invocation
1160
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
1161
+ // change handler should not have been called another time as we blocked the update in the middleware
1162
+ expect ( onChangeHandler ) . toHaveBeenCalledTimes ( 1 ) ;
1163
+ // The rendered field should also not have been updated
1156
1164
expect ( wrapper . find ( 'input' ) . getDOMNode < HTMLInputElement > ( ) . value ) . toBe (
1157
1165
'John Doe'
1158
1166
) ;
1159
1167
1160
1168
wrapper . unmount ( ) ;
1161
1169
} ) ;
1162
1170
1163
- test ( 'JsonForms middleware should update state if modified' , ( ) => {
1171
+ test ( 'JsonForms middleware should update state if modified' , async ( ) => {
1164
1172
// given
1165
1173
const onChangeHandler = jest . fn ( ) ;
1166
1174
const customMiddleware = jest . fn ( ) ;
@@ -1195,14 +1203,20 @@ test('JsonForms middleware should update state if modified', () => {
1195
1203
renderers = { renderers }
1196
1204
/>
1197
1205
) ;
1198
- setTimeout ( ( ) => {
1206
+
1207
+ // wait for 50 ms for the change handler invocation
1208
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
1209
+
1210
+ // initial rendering should call onChange 1 time
1211
+ expect ( onChangeHandler ) . toHaveBeenCalledTimes ( 1 ) ;
1212
+ {
1199
1213
const calls = onChangeHandler . mock . calls ;
1200
1214
const lastCallParameter = calls [ calls . length - 1 ] [ 0 ] ;
1201
1215
expect ( lastCallParameter . data ) . toEqual ( { foo : 'John Doe' } ) ;
1202
1216
expect ( lastCallParameter . errors ) . toEqual ( [ ] ) ;
1203
- } , 50 ) ;
1217
+ }
1204
1218
1205
- // when
1219
+ // adapt input
1206
1220
wrapper . find ( 'input' ) . simulate ( 'change' , {
1207
1221
target : {
1208
1222
value : 'Test Value' ,
@@ -1214,12 +1228,17 @@ test('JsonForms middleware should update state if modified', () => {
1214
1228
expect ( wrapper . find ( 'input' ) . getDOMNode < HTMLInputElement > ( ) . value ) . toBe (
1215
1229
'Test Value Test'
1216
1230
) ;
1217
- setTimeout ( ( ) => {
1231
+
1232
+ // wait for 50 ms for the change handler invocation
1233
+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
1234
+ // onChangeHandler should have been called after the state update
1235
+ expect ( onChangeHandler ) . toHaveBeenCalledTimes ( 2 ) ;
1236
+ {
1218
1237
const calls = onChangeHandler . mock . calls ;
1219
- const lastCallParameter = calls [ calls . length - 1 ] [ 1 ] ;
1238
+ const lastCallParameter = calls [ calls . length - 1 ] [ 0 ] ;
1220
1239
expect ( lastCallParameter . data ) . toEqual ( { foo : 'Test Value Test' } ) ;
1221
1240
expect ( lastCallParameter . errors ) . toEqual ( [ ] ) ;
1222
- } , 50 ) ;
1241
+ }
1223
1242
1224
1243
wrapper . unmount ( ) ;
1225
1244
} ) ;
0 commit comments