Skip to content

Commit 83d9a75

Browse files
committed
test: add re-render count test
1 parent 88d0ac6 commit 83d9a75

File tree

2 files changed

+33
-17
lines changed

2 files changed

+33
-17
lines changed

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
"@babel/runtime": "^7.20.0",
6767
"classnames": "^2.2.6",
6868
"rc-resize-observer": "^1.0.0",
69-
"rc-util": "^5.15.0"
69+
"rc-util": "^5.15.0",
70+
"sinon": "^15.0.1"
7071
}
7172
}

tests/props.test.js

+31-16
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React from 'react';
22
import { mount } from 'enzyme';
3+
import sinon from 'sinon';
34
import List from '../src';
45

56
describe('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

Comments
 (0)