@@ -112,17 +112,21 @@ describe('Modal', () => {
112
112
} ) ;
113
113
114
114
it ( 'give back focus to previous element or modal.' , ( done ) => {
115
+ function cleanup ( ) {
116
+ unmountModal ( ) ;
117
+ done ( ) ;
118
+ }
115
119
const modal = renderModal ( {
116
120
isOpen : true ,
117
121
onRequestClose ( ) {
118
- unmountModal ( ) ;
119
- done ( ) ;
122
+ cleanup ( ) ;
120
123
}
121
124
} , null , ( ) => { } ) ;
122
125
123
126
renderModal ( {
124
127
isOpen : true ,
125
128
onRequestClose ( ) {
129
+ unmountModal ( ) ;
126
130
Simulate . keyDown ( modal . portal . content , {
127
131
// The keyCode is all that matters, so this works
128
132
key : 'FakeKeyToTestLater' ,
@@ -175,6 +179,7 @@ describe('Modal', () => {
175
179
preventDefault ( ) { tabPrevented = true ; }
176
180
} ) ;
177
181
expect ( tabPrevented ) . toEqual ( true ) ;
182
+ unmountModal ( ) ;
178
183
} ) ;
179
184
180
185
it ( 'supports portalClassName' , ( ) => {
@@ -204,26 +209,31 @@ describe('Modal', () => {
204
209
it ( 'overrides the default styles when a custom overlayClassName is used' , ( ) => {
205
210
const modal = renderModal ( { isOpen : true , overlayClassName : 'myOverlayClass' } ) ;
206
211
expect ( modal . portal . overlay . style . backgroundColor ) . toEqual ( '' ) ;
212
+ unmountModal ( ) ;
207
213
} ) ;
208
214
209
215
it ( 'supports adding style to the modal contents' , ( ) => {
210
216
const modal = renderModal ( { isOpen : true , style : { content : { width : '20px' } } } ) ;
211
217
expect ( modal . portal . content . style . width ) . toEqual ( '20px' ) ;
218
+ unmountModal ( ) ;
212
219
} ) ;
213
220
214
221
it ( 'supports overriding style on the modal contents' , ( ) => {
215
222
const modal = renderModal ( { isOpen : true , style : { content : { position : 'static' } } } ) ;
216
223
expect ( modal . portal . content . style . position ) . toEqual ( 'static' ) ;
224
+ unmountModal ( ) ;
217
225
} ) ;
218
226
219
227
it ( 'supports adding style on the modal overlay' , ( ) => {
220
228
const modal = renderModal ( { isOpen : true , style : { overlay : { width : '75px' } } } ) ;
221
229
expect ( modal . portal . overlay . style . width ) . toEqual ( '75px' ) ;
230
+ unmountModal ( ) ;
222
231
} ) ;
223
232
224
233
it ( 'supports overriding style on the modal overlay' , ( ) => {
225
234
const modal = renderModal ( { isOpen : true , style : { overlay : { position : 'static' } } } ) ;
226
235
expect ( modal . portal . overlay . style . position ) . toEqual ( 'static' ) ;
236
+ unmountModal ( ) ;
227
237
} ) ;
228
238
229
239
it ( 'supports overriding the default styles' , ( ) => {
@@ -234,25 +244,42 @@ describe('Modal', () => {
234
244
const modal = renderModal ( { isOpen : true } ) ;
235
245
expect ( modal . portal . content . style . position ) . toEqual ( newStyle ) ;
236
246
Modal . defaultStyles . content . position = previousStyle ;
247
+ unmountModal ( ) ;
248
+ } ) ;
249
+
250
+ it ( 'should remove class from body when no modals opened' , ( ) => {
251
+ const expectedBodyClass = 'ReactModal__Body--open' ;
252
+ const classList = document . body . classList ;
253
+ renderModal ( { isOpen : true } ) ;
254
+ renderModal ( { isOpen : true } ) ;
255
+ expect ( classList . contains ( expectedBodyClass ) ) . toBe ( true ) ;
256
+ unmountModal ( ) ;
257
+ expect ( classList . contains ( expectedBodyClass ) ) . toBe ( false ) ;
258
+ unmountModal ( ) ;
259
+ expect ( classList . contains ( expectedBodyClass ) ) . toBe ( false ) ;
237
260
} ) ;
238
261
239
262
it ( 'adds class to body when open' , ( ) => {
263
+ const expectedBodyClass = 'ReactModal__Body--open' ;
264
+ const classList = document . body . classList ;
240
265
renderModal ( { isOpen : false } ) ;
241
- expect ( document . body . className . indexOf ( 'ReactModal__Body--open' ) !== - 1 ) . toEqual ( false ) ;
242
-
266
+ expect ( classList . contains ( expectedBodyClass ) ) . toEqual ( false ) ;
267
+ unmountModal ( ) ;
243
268
renderModal ( { isOpen : true } ) ;
244
- expect ( document . body . className . indexOf ( 'ReactModal__Body--open' ) !== - 1 ) . toEqual ( true ) ;
245
-
269
+ expect ( classList . contains ( expectedBodyClass ) ) . toEqual ( true ) ;
270
+ unmountModal ( ) ;
246
271
renderModal ( { isOpen : false } ) ;
247
- expect ( document . body . className . indexOf ( 'ReactModal__Body--open' ) !== - 1 ) . toEqual ( false ) ;
272
+ expect ( classList . contains ( expectedBodyClass ) ) . toEqual ( false ) ;
248
273
unmountModal ( ) ;
249
274
} ) ;
250
275
251
276
it ( 'removes class from body when unmounted without closing' , ( ) => {
277
+ const expectedBodyClass = 'ReactModal__Body--open' ;
278
+ const classList = document . body . classList ;
252
279
renderModal ( { isOpen : true } ) ;
253
- expect ( document . body . className . indexOf ( 'ReactModal__Body--open' ) !== - 1 ) . toEqual ( true ) ;
280
+ expect ( classList . contains ( expectedBodyClass ) ) . toEqual ( true ) ;
254
281
unmountModal ( ) ;
255
- expect ( document . body . className . indexOf ( 'ReactModal__Body--open' ) !== - 1 ) . toEqual ( false ) ;
282
+ expect ( classList . contains ( expectedBodyClass ) ) . toEqual ( false ) ;
256
283
} ) ;
257
284
258
285
it ( 'removes aria-hidden from appElement when unmounted without closing' , ( ) => {
0 commit comments