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