@@ -30,6 +30,16 @@ let wrapper
30
30
const wrapperMount = ( ...args ) => ( wrapper = mount ( ...args ) )
31
31
const wrapperShallow = ( ...args ) => ( wrapper = shallow ( ...args ) )
32
32
33
+ // cleanup in `useEffect()` is executed async, so we need to perform a proper cleanup first to avoid
34
+ // collisions with other tests
35
+ function waitForClassesCleanup ( done , customAssertions = ( ) => { } ) {
36
+ wrapper . unmount ( )
37
+ assertWithTimeout ( ( ) => {
38
+ assertBodyClasses ( 'dimmed' , false )
39
+ customAssertions ( )
40
+ } , done )
41
+ }
42
+
33
43
describe ( 'Modal' , ( ) => {
34
44
beforeEach ( ( ) => {
35
45
if ( wrapper && wrapper . unmount ) {
@@ -236,54 +246,66 @@ describe('Modal', () => {
236
246
} )
237
247
238
248
describe ( 'dimmer' , ( ) => {
239
- it ( 'adds a "dimmer" className to the body' , ( ) => {
249
+ it ( 'adds a "dimmer" className to the body' , ( done ) => {
240
250
wrapperMount ( < Modal open /> )
251
+
241
252
assertBodyContains ( '.ui.page.modals.dimmer.transition.visible.active' )
253
+ waitForClassesCleanup ( done )
242
254
} )
243
255
244
256
describe ( 'can be "true"' , ( ) => {
245
- it ( 'adds/removes body classes "dimmable dimmed" on mount/unmount' , ( ) => {
257
+ it ( 'adds/removes body classes "dimmable dimmed" on mount/unmount' , ( done ) => {
246
258
assertBodyClasses ( 'dimmable dimmed' , false )
247
259
248
260
wrapperMount ( < Modal open dimmer /> )
249
261
assertBodyClasses ( 'dimmable dimmed' )
250
262
251
263
wrapper . setProps ( { open : false } )
252
264
assertBodyClasses ( 'dimmable dimmed' , false )
265
+
266
+ waitForClassesCleanup ( done )
253
267
} )
254
268
} )
255
269
256
270
describe ( 'blurring' , ( ) => {
257
- it ( 'adds/removes body classes "dimmable dimmed blurring" on mount/unmount' , ( ) => {
271
+ it ( 'adds/removes body classes "dimmable dimmed blurring" on mount/unmount' , ( done ) => {
258
272
assertBodyClasses ( 'dimmable dimmed blurring' , false )
259
273
260
274
wrapperMount ( < Modal open dimmer = 'blurring' /> )
261
275
assertBodyClasses ( 'dimmable dimmed blurring' )
262
276
263
277
wrapper . setProps ( { open : false } )
264
278
assertBodyClasses ( 'dimmable dimmed blurring' , false )
279
+
280
+ waitForClassesCleanup ( done )
265
281
} )
266
282
267
- it ( 'adds a dimmer to the body' , ( ) => {
283
+ it ( 'adds a dimmer to the body' , ( done ) => {
268
284
wrapperMount ( < Modal open dimmer = 'blurring' /> )
285
+
269
286
assertBodyContains ( '.ui.page.modals.dimmer.transition.visible.active' )
287
+ waitForClassesCleanup ( done )
270
288
} )
271
289
} )
272
290
273
291
describe ( 'inverted' , ( ) => {
274
- it ( 'adds/removes body classes "dimmable dimmed" on mount/unmount' , ( ) => {
292
+ it ( 'adds/removes body classes "dimmable dimmed" on mount/unmount' , ( done ) => {
275
293
assertBodyClasses ( 'dimmable dimmed' , false )
276
294
277
295
wrapperMount ( < Modal open dimmer /> )
278
296
assertBodyClasses ( 'dimmable dimmed' )
279
297
280
298
wrapper . setProps ( { open : false } )
281
299
assertBodyClasses ( 'dimmable dimmed' , false )
300
+
301
+ waitForClassesCleanup ( done )
282
302
} )
283
303
284
- it ( 'adds an inverted dimmer to the body' , ( ) => {
304
+ it ( 'adds an inverted dimmer to the body' , ( done ) => {
285
305
wrapperMount ( < Modal open dimmer = 'inverted' /> )
306
+
286
307
assertBodyContains ( '.ui.inverted.page.modals.dimmer.transition.visible.active' )
308
+ waitForClassesCleanup ( done )
287
309
} )
288
310
} )
289
311
@@ -509,9 +531,11 @@ describe('Modal', () => {
509
531
window . innerHeight = innerHeight
510
532
} )
511
533
512
- it ( 'does not add the scrolling class to the body by default' , ( ) => {
534
+ it ( 'does not add the scrolling class to the body by default' , ( done ) => {
513
535
wrapperMount ( < Modal open /> )
536
+
514
537
assertBodyClasses ( 'scrolling' , false )
538
+ waitForClassesCleanup ( done )
515
539
} )
516
540
517
541
it ( 'does not add the scrolling class to the body when equal to the window height' , ( done ) => {
@@ -588,12 +612,8 @@ describe('Modal', () => {
588
612
window . innerHeight = 10
589
613
wrapperMount ( < Modal open > foo</ Modal > )
590
614
591
- requestAnimationFrame ( ( ) => {
592
- assertBodyClasses ( 'scrolling' )
593
- wrapper . unmount ( )
594
-
615
+ waitForClassesCleanup ( done , ( ) => {
595
616
assertBodyClasses ( 'scrolling' , false )
596
- done ( )
597
617
} )
598
618
} )
599
619
} )
0 commit comments