@@ -2,7 +2,7 @@ import { render, screen } from '@testing-library/react';
22import '@testing-library/jest-dom' ;
33
44import { Menu } from '../Menu' ;
5- import { MenuItem } from '../MenuItem' ;
5+ import { MenuItem , MenuItemProps } from '../MenuItem' ;
66import { MenuList } from '../MenuList' ;
77import { MenuContent } from '../MenuContent' ;
88
@@ -16,6 +16,44 @@ describe('Menu', () => {
1616 expect ( asFragment ( ) ) . toMatchSnapshot ( ) ;
1717 } ) ;
1818
19+ test ( 'should accept onSelect with various types' , ( ) => {
20+ const onSelectMock = jest . fn ( ) ;
21+
22+ const items : MenuItemProps [ ] = [
23+ { itemId : 1 , children : 'Item 1' , key : 'item1' } ,
24+ { itemId : new Date ( 1 ) , children : 'Item 2' , key : 'item2' } ,
25+ { itemId : 'item3' , children : 'Item 3' , key : 'item3' } ,
26+ { itemId : { some : 'object' } , children : 'Item 4' , key : 'item4' } ,
27+ { itemId : NaN , children : 'Item 5' , key : 'item5' } ,
28+ { itemId : null , children : 'Item 6' , key : 'item6' } ,
29+ { itemId : 0n , children : 'Item 7' , key : 'item7' } ,
30+ { itemId : true , children : 'Item 8' , key : 'item8' } ,
31+ { itemId : false , children : 'Item 9' , key : 'item9' } ,
32+ { itemId : - 0 , children : 'Item 10' , key : 'item10' } ,
33+ { itemId : '' , children : 'Item 11' , key : 'item11' }
34+ ] ;
35+
36+ render (
37+ < Menu activeItemId = { 0 } onSelect = { onSelectMock } >
38+ < MenuContent >
39+ < MenuList >
40+ { items . map ( ( item ) => (
41+ < MenuItem key = { item . key } itemId = { item . itemId } >
42+ { item . children }
43+ </ MenuItem >
44+ ) ) }
45+ </ MenuList >
46+ </ MenuContent >
47+ </ Menu >
48+ ) ;
49+
50+ for ( const item of items ) {
51+ const menuItem = screen . getByText ( item . children as string ) ;
52+ menuItem . click ( ) ;
53+ expect ( onSelectMock ) . toHaveBeenCalledWith ( expect . anything ( ) , item . itemId ) ;
54+ }
55+ } ) ;
56+
1957 describe ( 'with isPlain' , ( ) => {
2058 test ( 'should render Menu with plain styles applied' , ( ) => {
2159 render (
0 commit comments