@@ -233,161 +233,192 @@ describe('Menu', () => {
233
233
} , 0 )
234
234
} )
235
235
236
- // it('should always follow openKeys when mode is switched', () => {
237
- // const wrapper = mount({
238
- // render () {
239
- // return (
240
- // <Menu defaultOpenKeys={['1']} mode='inline'>
241
- // <Menu.Item key='menu1'>
242
- // <Icon type='inbox' />
243
- // <span>Option</span>
244
- // </Menu.Item>
245
- // <SubMenu key='1' title='submenu1'>
246
- // <Menu.Item key='submenu1'>
247
- // Option
248
- // </Menu.Item>
249
- // <Menu.Item key='submenu2'>
250
- // Option
251
- // </Menu.Item>
252
- // </SubMenu>
253
- // </Menu>
254
- // )
255
- // },
256
- // })
257
-
258
- // expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-inline')).toBe(true)
259
- // expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).toBe(false)
260
-
261
- // wrapper.setProps({ inlineCollapsed: true })
262
- // // 动画结束后套样式;
263
- // jest.runAllTimers()
264
- // wrapper.update()
265
-
266
- // expect(wrapper.find('.ant-menu').at(0).hasClass('ant-menu-vertical')).toBe(true)
267
- // expect(wrapper.find('.ant-menu-sub').length).toBe(0)
268
-
269
- // wrapper.setProps({ inlineCollapsed: false })
270
- // jest.runAllTimers()
271
- // wrapper.update()
272
-
273
- // expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-inline')).toBe(true)
274
- // expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).toBe(false)
275
- // })
276
-
277
- // it('inlineCollapsed should works well when specify a not existed default openKeys', () => {
278
- // const wrapper = mount({
279
- // render () {
280
- // return (
281
- // <Menu defaultOpenKeys={['not-existed']} mode='inline'>
282
- // <Menu.Item key='menu1'>
283
- // <Icon type='inbox' />
284
- // <span>Option</span>
285
- // </Menu.Item>
286
- // <SubMenu key='1' title='submenu1'>
287
- // <Menu.Item key='submenu1'>
288
- // Option
289
- // </Menu.Item>
290
- // <Menu.Item key='submenu2'>
291
- // Option
292
- // </Menu.Item>
293
- // </SubMenu>
294
- // </Menu>
295
- // )
296
- // },
297
- // })
298
- // expect(wrapper.find('.ant-menu-sub').length).toBe(0)
299
- // wrapper.setProps({ inlineCollapsed: true })
300
- // jest.runAllTimers()
301
- // wrapper.update()
302
- // wrapper.find('.ant-menu-submenu-title').at(0).simulate('mouseEnter')
303
- // jest.runAllTimers()
304
- // wrapper.update()
305
- // expect(wrapper.find('.ant-menu-submenu').at(0).hasClass('ant-menu-submenu-vertical')).toBe(true)
306
- // expect(wrapper.find('.ant-menu-submenu').at(0).hasClass('ant-menu-submenu-open')).toBe(true)
307
- // expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-vertical')).toBe(true)
308
- // expect(wrapper.find('.ant-menu-sub').at(0).hasClass('ant-menu-hidden')).toBe(false)
309
- // })
236
+ it ( 'should always follow openKeys when mode is switched' , async ( ) => {
237
+ const wrapper = mount ( {
238
+ props : {
239
+ inlineCollapsed : {
240
+ type : Boolean ,
241
+ default : false ,
242
+ } ,
243
+ } ,
244
+ render ( ) {
245
+ return (
246
+ < Menu ref = 'menu' defaultOpenKeys = { [ '1' ] } mode = 'inline' inlineCollapsed = { this . inlineCollapsed } >
247
+ < Menu . Item key = 'menu1' >
248
+ < Icon type = 'inbox' />
249
+ < span > Option</ span >
250
+ </ Menu . Item >
251
+ < SubMenu key = '1' title = 'submenu1' >
252
+ < Menu . Item key = 'submenu1' >
253
+ Option
254
+ </ Menu . Item >
255
+ < Menu . Item key = 'submenu2' >
256
+ Option
257
+ </ Menu . Item >
258
+ </ SubMenu >
259
+ </ Menu >
260
+ )
261
+ } ,
262
+ } , { attachToDocument : true , sync : false } )
263
+ await asyncExpect ( ( ) => {
264
+ expect ( wrapper . findAll ( '.ant-menu-sub' ) . at ( 0 ) . classes ( ) ) . toContain ( 'ant-menu-inline' )
265
+ expect ( $$ ( '.ant-menu-sub' ) [ 0 ] . style . display ) . not . toBe ( 'none' )
266
+ } , 0 )
267
+ wrapper . setProps ( { inlineCollapsed : true } )
268
+ await asyncExpect ( ( ) => {
269
+ // 动画完成后的回调
270
+ wrapper . vm . $refs . menu . switchModeFromInline = false
271
+ wrapper . vm . $forceUpdate ( )
272
+ } )
273
+ await asyncExpect ( ( ) => {
274
+ expect ( wrapper . findAll ( '.ant-menu' ) . at ( 0 ) . classes ( ) ) . toContain ( 'ant-menu-vertical' )
275
+ expect ( wrapper . findAll ( '.ant-menu-sub' ) . length ) . toBe ( 0 )
276
+ } , 0 )
277
+ wrapper . setProps ( { inlineCollapsed : false } )
278
+ await asyncExpect ( ( ) => {
279
+ expect ( wrapper . findAll ( '.ant-menu-sub' ) . at ( 0 ) . classes ( ) ) . toContain ( 'ant-menu-inline' )
280
+ expect ( $$ ( '.ant-menu-sub' ) [ 0 ] . style . display ) . not . toBe ( 'none' )
281
+ } , 0 )
282
+ } )
310
283
311
- // describe('open submenu when click submenu title', () => {
312
- // beforeEach(() => {
313
- // jest.useFakeTimers()
314
- // })
284
+ it ( 'inlineCollapsed should works well when specify a not existed default openKeys' , async ( ) => {
285
+ const wrapper = mount ( {
286
+ props : {
287
+ inlineCollapsed : {
288
+ type : Boolean ,
289
+ default : false ,
290
+ } ,
291
+ } ,
292
+ render ( ) {
293
+ return (
294
+ < Menu ref = 'menu' defaultOpenKeys = { [ 'not-existed' ] } mode = 'inline' inlineCollapsed = { this . inlineCollapsed } >
295
+ < Menu . Item key = 'menu1' >
296
+ < Icon type = 'inbox' />
297
+ < span > Option</ span >
298
+ </ Menu . Item >
299
+ < SubMenu key = '1' title = 'submenu1' >
300
+ < Menu . Item key = 'submenu1' >
301
+ Option
302
+ </ Menu . Item >
303
+ < Menu . Item key = 'submenu2' >
304
+ Option
305
+ </ Menu . Item >
306
+ </ SubMenu >
307
+ </ Menu >
308
+ )
309
+ } ,
310
+ } , { attachToDocument : true , sync : false } )
311
+ await asyncExpect ( ( ) => {
312
+ expect ( wrapper . findAll ( '.ant-menu-sub' ) . length ) . toBe ( 0 )
313
+ } )
314
+ wrapper . setProps ( { inlineCollapsed : true } )
315
+ await asyncExpect ( ( ) => {
316
+ // 动画完成后的回调
317
+ wrapper . vm . $refs . menu . switchModeFromInline = false
318
+ wrapper . vm . $forceUpdate ( )
319
+ } )
320
+ await asyncExpect ( ( ) => {
321
+ wrapper . findAll ( '.ant-menu-submenu-title' ) . at ( 0 ) . trigger ( 'mouseenter' )
322
+ } )
323
+ await asyncExpect ( ( ) => {
324
+ expect ( wrapper . findAll ( '.ant-menu-submenu' ) . at ( 0 ) . classes ( ) ) . toContain ( 'ant-menu-submenu-vertical' )
325
+ expect ( wrapper . findAll ( '.ant-menu-submenu' ) . at ( 0 ) . classes ( ) ) . toContain ( 'ant-menu-submenu-open' )
326
+ expect ( $$ ( '.ant-menu-sub' ) [ 0 ] . className ) . toContain ( 'ant-menu-vertical' )
327
+ expect ( $$ ( '.ant-menu-sub' ) [ 0 ] . style . display ) . not . toBe ( 'none' )
328
+ } , 300 )
329
+ } )
315
330
316
- // afterEach(() => {
317
- // jest.useRealTimers()
318
- // })
331
+ describe ( 'open submenu when click submenu title' , ( ) => {
332
+ beforeEach ( ( ) => {
333
+ document . body . innerHTML = ''
334
+ } )
319
335
320
- // const toggleMenu = (wrapper, index, event) => {
321
- // wrapper.find('.ant-menu-submenu-title').at(index).simulate(event)
322
- // jest.runAllTimers()
323
- // wrapper.update()
324
- // }
336
+ const toggleMenu = ( wrapper , index , event ) => {
337
+ wrapper . findAll ( '.ant-menu-submenu-title' ) . at ( index ) . trigger ( event )
338
+ }
325
339
326
- // it('inline', () => {
327
- // const wrapper = mount({
328
- // render () {
329
- // return (
330
- // <Menu mode='inline'>
331
- // <SubMenu key='1' title='submenu1'>
332
- // <Menu.Item key='submenu1'>Option 1</Menu.Item>
333
- // <Menu.Item key='submenu2'>Option 2</Menu.Item>
334
- // </SubMenu>
335
- // <Menu.Item key='2'>menu2</Menu.Item>
336
- // </Menu>
337
- // )
338
- // },
339
- // })
340
- // expect(wrapper.find('.ant-menu-sub').length).toBe(0)
341
- // toggleMenu(wrapper, 0, 'click')
342
- // expect(wrapper.find('.ant-menu-sub').hostNodes().length).toBe(1)
343
- // expect($$('.ant-menu-sub')[0].parentElement.style.display).not.toBe('none')
344
- // toggleMenu(wrapper, 0, 'click')
345
- // expect($$('.ant-menu-sub')[0].parentElement.style.display).toBe('none')
346
- // })
340
+ it ( 'inline' , async ( ) => {
341
+ const wrapper = mount ( {
342
+ render ( ) {
343
+ return (
344
+ < Menu mode = 'inline' >
345
+ < SubMenu key = '1' title = 'submenu1' >
346
+ < Menu . Item key = 'submenu1' > Option 1</ Menu . Item >
347
+ < Menu . Item key = 'submenu2' > Option 2</ Menu . Item >
348
+ </ SubMenu >
349
+ < Menu . Item key = '2' > menu2</ Menu . Item >
350
+ </ Menu >
351
+ )
352
+ } ,
353
+ } , { attachToDocument : true , sync : false } )
354
+ await asyncExpect ( ( ) => {
355
+ expect ( $$ ( '.ant-menu-sub' ) . length ) . toBe ( 0 )
356
+ toggleMenu ( wrapper , 0 , 'click' )
357
+ } )
358
+ await asyncExpect ( ( ) => {
359
+ expect ( $$ ( '.ant-menu-sub' ) . length ) . toBe ( 1 )
360
+ expect ( $$ ( '.ant-menu-sub' ) [ 0 ] . style . display ) . not . toBe ( 'none' )
361
+ toggleMenu ( wrapper , 0 , 'click' )
362
+ } )
363
+ await asyncExpect ( ( ) => {
364
+ expect ( $$ ( '.ant-menu-sub' ) [ 0 ] . style . display ) . toBe ( 'none' )
365
+ } )
366
+ } )
347
367
348
- // it('vertical', () => {
349
- // const wrapper = mount({
350
- // render () {
351
- // return (
352
- // <Menu mode='vertical'>
353
- // <SubMenu key='1' title='submenu1'>
354
- // <Menu.Item key='submenu1'>Option 1</Menu.Item>
355
- // <Menu.Item key='submenu2'>Option 2</Menu.Item>
356
- // </SubMenu>
357
- // <Menu.Item key='2'>menu2</Menu.Item>
358
- // </Menu>
359
- // )
360
- // },
361
- // })
362
- // expect(wrapper.find('.ant-menu-sub').length).toBe(0)
363
- // toggleMenu(wrapper, 0, 'mouseenter')
364
- // expect(wrapper.find('.ant-menu-sub').hostNodes().length).toBe(1)
365
- // expect($$('.ant-menu-sub')[0].parentElement.style.display).not.toBe('none')
366
- // toggleMenu(wrapper, 0, 'mouseleave')
367
- // expect($$('.ant-menu-sub')[0].parentElement.style.display).toBe('none')
368
- // })
368
+ it ( 'vertical' , async ( ) => {
369
+ const wrapper = mount ( {
370
+ render ( ) {
371
+ return (
372
+ < Menu mode = 'vertical' >
373
+ < SubMenu key = '1' title = 'submenu1' >
374
+ < Menu . Item key = 'submenu1' > Option 1</ Menu . Item >
375
+ < Menu . Item key = 'submenu2' > Option 2</ Menu . Item >
376
+ </ SubMenu >
377
+ < Menu . Item key = '2' > menu2</ Menu . Item >
378
+ </ Menu >
379
+ )
380
+ } ,
381
+ } , { attachToDocument : true , sync : false } )
382
+ await asyncExpect ( ( ) => {
383
+ expect ( $$ ( '.ant-menu-sub' ) . length ) . toBe ( 0 )
384
+ toggleMenu ( wrapper , 0 , 'mouseenter' )
385
+ } )
386
+ await asyncExpect ( ( ) => {
387
+ expect ( $$ ( '.ant-menu-sub' ) . length ) . toBe ( 1 )
388
+ expect ( $$ ( '.ant-menu-sub' ) [ 0 ] . parentElement . style . display ) . not . toBe ( 'none' )
389
+ toggleMenu ( wrapper , 0 , 'mouseleave' )
390
+ } , 500 )
391
+ await asyncExpect ( ( ) => {
392
+ expect ( $$ ( '.ant-menu-sub' ) [ 0 ] . parentElement . style . display ) . toBe ( 'none' )
393
+ } , 500 )
394
+ } )
369
395
370
- // it('horizontal', () => {
371
- // jest.useFakeTimers()
372
- // const wrapper = mount({
373
- // render () {
374
- // return (
375
- // <Menu mode='horizontal'>
376
- // <SubMenu key='1' title='submenu1'>
377
- // <Menu.Item key='submenu1'>Option 1</Menu.Item>
378
- // <Menu.Item key='submenu2'>Option 2</Menu.Item>
379
- // </SubMenu>
380
- // <Menu.Item key='2'>menu2</Menu.Item>
381
- // </Menu>
382
- // )
383
- // },
384
- // })
385
- // expect(wrapper.find('.ant-menu-sub').length).toBe(0)
386
- // toggleMenu(wrapper, 0, 'mouseenter')
387
- // expect(wrapper.find('.ant-menu-sub').hostNodes().length).toBe(1)
388
- // expect($$('.ant-menu-sub')[0].parentElement.style.display).not.toBe('none')
389
- // toggleMenu(wrapper, 0, 'mouseleave')
390
- // expect($$('.ant-menu-sub')[0].parentElement.style.display).toBe('none')
391
- // })
392
- // })
396
+ it ( 'horizontal' , async ( ) => {
397
+ const wrapper = mount ( {
398
+ render ( ) {
399
+ return (
400
+ < Menu mode = 'horizontal' >
401
+ < SubMenu key = '1' title = 'submenu1' >
402
+ < Menu . Item key = 'submenu1' > Option 1</ Menu . Item >
403
+ < Menu . Item key = 'submenu2' > Option 2</ Menu . Item >
404
+ </ SubMenu >
405
+ < Menu . Item key = '2' > menu2</ Menu . Item >
406
+ </ Menu >
407
+ )
408
+ } ,
409
+ } , { attachToDocument : true , sync : false } )
410
+ await asyncExpect ( ( ) => {
411
+ expect ( $$ ( '.ant-menu-sub' ) . length ) . toBe ( 0 )
412
+ toggleMenu ( wrapper , 0 , 'mouseenter' )
413
+ } )
414
+ await asyncExpect ( ( ) => {
415
+ expect ( $$ ( '.ant-menu-sub' ) . length ) . toBe ( 1 )
416
+ expect ( $$ ( '.ant-menu-sub' ) [ 0 ] . parentElement . style . display ) . not . toBe ( 'none' )
417
+ toggleMenu ( wrapper , 0 , 'mouseleave' )
418
+ } , 500 )
419
+ await asyncExpect ( ( ) => {
420
+ expect ( $$ ( '.ant-menu-sub' ) [ 0 ] . parentElement . style . display ) . toBe ( 'none' )
421
+ } , 500 )
422
+ } )
423
+ } )
393
424
} )
0 commit comments