1
1
import React from 'react' ;
2
2
import { mount } from 'enzyme' ;
3
+ import sinon from 'sinon' ;
3
4
import List from '../src' ;
4
5
5
6
describe ( 'Props' , ( ) => {
@@ -11,33 +12,47 @@ describe('Props', () => {
11
12
}
12
13
13
14
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 } >
15
16
{ ( { id } ) => < ItemComponent > { id } </ ItemComponent > }
16
17
</ List > ,
17
18
) ;
18
19
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' ) ;
32
23
} ) ;
33
24
34
25
it ( 'prefixCls' , ( ) => {
35
26
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 > }
38
29
</ List > ,
39
30
) ;
40
31
41
32
expect ( wrapper . find ( '.prefix-holder-inner' ) . length ) . toBeTruthy ( ) ;
42
33
} ) ;
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
+ } ) ;
43
58
} ) ;
0 commit comments