11import  React  from  'react' ; 
22import  {  mount  }  from  'enzyme' ; 
3+ import  sinon  from  'sinon' ; 
34import  List  from  '../src' ; 
45
56describe ( 'Props' ,  ( )  =>  { 
@@ -11,33 +12,47 @@ describe('Props', () => {
1112    } 
1213
1314    const  wrapper  =  mount ( 
14-       < List  data = { [ {  id : 903  } ,  {  id : 1128  } ] }  itemKey = { item  =>  item . id } > 
15+       < List  data = { [ {  id : 903  } ,  {  id : 1128  } ] }  itemKey = { ( item )  =>  item . id } > 
1516        { ( {  id } )  =>  < ItemComponent > { id } </ ItemComponent > } 
1617      </ List > , 
1718    ) ; 
1819
19-     expect ( 
20-       wrapper 
21-         . find ( 'Item' ) 
22-         . at ( 0 ) 
23-         . key ( ) , 
24-     ) . toBe ( '903' ) ; 
25- 
26-     expect ( 
27-       wrapper 
28-         . find ( 'Item' ) 
29-         . at ( 1 ) 
30-         . key ( ) , 
31-     ) . toBe ( '1128' ) ; 
20+     expect ( wrapper . find ( 'Item' ) . at ( 0 ) . key ( ) ) . toBe ( '903' ) ; 
21+ 
22+     expect ( wrapper . find ( 'Item' ) . at ( 1 ) . key ( ) ) . toBe ( '1128' ) ; 
3223  } ) ; 
3324
3425  it ( 'prefixCls' ,  ( )  =>  { 
3526    const  wrapper  =  mount ( 
36-       < List  data = { [ 0 ] }  itemKey = { id  =>  id }  prefixCls = "prefix" > 
37-         { id  =>  < div > { id } </ div > } 
27+       < List  data = { [ 0 ] }  itemKey = { ( id )  =>  id }  prefixCls = "prefix" > 
28+         { ( id )  =>  < div > { id } </ div > } 
3829      </ List > , 
3930    ) ; 
4031
4132    expect ( wrapper . find ( '.prefix-holder-inner' ) . length ) . toBeTruthy ( ) ; 
4233  } ) ; 
34+ 
35+   it ( 'no unnecessary re-render' ,  ( )  =>  { 
36+     const  renderItem  =  sinon . fake ( ( {  id,  key } )  =>  < div  key = { key } > { id } </ div > ) ; 
37+     const  data  =  [ {  id : 1 ,  key : 1  } ] ; 
38+     function  Wrapper ( )  { 
39+       const  [ state ,  setState ]  =  React . useState ( 0 ) ; 
40+ 
41+       React . useEffect ( ( )  =>  { 
42+         setState ( 1 ) ; 
43+       } ,  [ ] ) ; 
44+ 
45+       return  ( 
46+         < div > 
47+           < h1 > { state } </ h1 > 
48+           < List  data = { data }  itemKey = "key"  prefixCls = "prefix" > 
49+             { renderItem } 
50+           </ List > 
51+         </ div > 
52+       ) ; 
53+     } 
54+     const  wrapper  =  mount ( < Wrapper  /> ) ; 
55+     expect ( wrapper . find ( 'h1' ) . text ( ) ) . toBe ( '1' ) ; 
56+     expect ( renderItem . callCount ) . toBe ( 1 ) ; 
57+   } ) ; 
4358} ) ; 
0 commit comments