@@ -30,6 +30,16 @@ let wrapper
3030const wrapperMount = ( ...args ) => ( wrapper = mount ( ...args ) )
3131const wrapperShallow = ( ...args ) => ( wrapper = shallow ( ...args ) )
3232
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+
3343describe ( 'Modal' , ( ) => {
3444 beforeEach ( ( ) => {
3545 if ( wrapper && wrapper . unmount ) {
@@ -236,54 +246,66 @@ describe('Modal', () => {
236246 } )
237247
238248 describe ( 'dimmer' , ( ) => {
239- it ( 'adds a "dimmer" className to the body' , ( ) => {
249+ it ( 'adds a "dimmer" className to the body' , ( done ) => {
240250 wrapperMount ( < Modal open /> )
251+
241252 assertBodyContains ( '.ui.page.modals.dimmer.transition.visible.active' )
253+ waitForClassesCleanup ( done )
242254 } )
243255
244256 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 ) => {
246258 assertBodyClasses ( 'dimmable dimmed' , false )
247259
248260 wrapperMount ( < Modal open dimmer /> )
249261 assertBodyClasses ( 'dimmable dimmed' )
250262
251263 wrapper . setProps ( { open : false } )
252264 assertBodyClasses ( 'dimmable dimmed' , false )
265+
266+ waitForClassesCleanup ( done )
253267 } )
254268 } )
255269
256270 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 ) => {
258272 assertBodyClasses ( 'dimmable dimmed blurring' , false )
259273
260274 wrapperMount ( < Modal open dimmer = 'blurring' /> )
261275 assertBodyClasses ( 'dimmable dimmed blurring' )
262276
263277 wrapper . setProps ( { open : false } )
264278 assertBodyClasses ( 'dimmable dimmed blurring' , false )
279+
280+ waitForClassesCleanup ( done )
265281 } )
266282
267- it ( 'adds a dimmer to the body' , ( ) => {
283+ it ( 'adds a dimmer to the body' , ( done ) => {
268284 wrapperMount ( < Modal open dimmer = 'blurring' /> )
285+
269286 assertBodyContains ( '.ui.page.modals.dimmer.transition.visible.active' )
287+ waitForClassesCleanup ( done )
270288 } )
271289 } )
272290
273291 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 ) => {
275293 assertBodyClasses ( 'dimmable dimmed' , false )
276294
277295 wrapperMount ( < Modal open dimmer /> )
278296 assertBodyClasses ( 'dimmable dimmed' )
279297
280298 wrapper . setProps ( { open : false } )
281299 assertBodyClasses ( 'dimmable dimmed' , false )
300+
301+ waitForClassesCleanup ( done )
282302 } )
283303
284- it ( 'adds an inverted dimmer to the body' , ( ) => {
304+ it ( 'adds an inverted dimmer to the body' , ( done ) => {
285305 wrapperMount ( < Modal open dimmer = 'inverted' /> )
306+
286307 assertBodyContains ( '.ui.inverted.page.modals.dimmer.transition.visible.active' )
308+ waitForClassesCleanup ( done )
287309 } )
288310 } )
289311
@@ -509,9 +531,11 @@ describe('Modal', () => {
509531 window . innerHeight = innerHeight
510532 } )
511533
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 ) => {
513535 wrapperMount ( < Modal open /> )
536+
514537 assertBodyClasses ( 'scrolling' , false )
538+ waitForClassesCleanup ( done )
515539 } )
516540
517541 it ( 'does not add the scrolling class to the body when equal to the window height' , ( done ) => {
@@ -588,12 +612,8 @@ describe('Modal', () => {
588612 window . innerHeight = 10
589613 wrapperMount ( < Modal open > foo</ Modal > )
590614
591- requestAnimationFrame ( ( ) => {
592- assertBodyClasses ( 'scrolling' )
593- wrapper . unmount ( )
594-
615+ waitForClassesCleanup ( done , ( ) => {
595616 assertBodyClasses ( 'scrolling' , false )
596- done ( )
597617 } )
598618 } )
599619 } )
0 commit comments