Skip to content

Commit d54b974

Browse files
committed
Add usePaginatedRequest tests
1 parent db0a9a2 commit d54b974

File tree

4 files changed

+260
-21
lines changed

4 files changed

+260
-21
lines changed

package-lock.json

Lines changed: 69 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
"react": "^16.8.0",
6868
"react-dom": "^16.8.0",
6969
"react-test-renderer": "^16.8.0",
70-
"react-testing-library": "^5.4.0",
70+
"react-testing-library": "^6.0.0",
7171
"rimraf": "^2.6.2"
7272
}
7373
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`usePaginatedRequest call loadMore (expect hasMore - false) 1`] = `
4+
<div>
5+
<div>
6+
<div>
7+
1
8+
</div>
9+
<div>
10+
2
11+
</div>
12+
<div>
13+
3
14+
</div>
15+
<button
16+
data-testid="trigger"
17+
/>
18+
</div>
19+
</div>
20+
`;
21+
22+
exports[`usePaginatedRequest call loadMore 1`] = `
23+
<div>
24+
<div>
25+
<div>
26+
1
27+
</div>
28+
<div>
29+
2
30+
</div>
31+
<div>
32+
3
33+
</div>
34+
<div>
35+
4
36+
</div>
37+
<div>
38+
hasMore
39+
</div>
40+
<button
41+
data-testid="trigger"
42+
/>
43+
</div>
44+
</div>
45+
`;
46+
47+
exports[`usePaginatedRequest first load (expect hasMore - false) 1`] = `
48+
<div>
49+
<div>
50+
<div>
51+
1
52+
</div>
53+
<button
54+
data-testid="trigger"
55+
/>
56+
</div>
57+
</div>
58+
`;
59+
60+
exports[`usePaginatedRequest first load 1`] = `
61+
<div>
62+
<div>
63+
<div>
64+
1
65+
</div>
66+
<div>
67+
2
68+
</div>
69+
<div>
70+
hasMore
71+
</div>
72+
<button
73+
data-testid="trigger"
74+
/>
75+
</div>
76+
</div>
77+
`;
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import React from "react";
2+
import { render, wait, fireEvent, cleanup } from "react-testing-library";
3+
import { usePaginatedRequest } from "../usePaginatedRequest";
4+
5+
const ChildComponent = props => {
6+
return (
7+
<div>
8+
{props.data.map(item => (
9+
<div>{item}</div>
10+
))}
11+
{props.hasMore && <div>hasMore</div>}
12+
<button data-testid="trigger" onClick={props.loadMore} />
13+
</div>
14+
);
15+
};
16+
17+
describe("usePaginatedRequest", () => {
18+
afterEach(cleanup);
19+
20+
it("first load", async () => {
21+
const request = jest.fn(() => Promise.resolve([1, 2]));
22+
23+
const Component = () => {
24+
const { data, hasMore, loadMore } = usePaginatedRequest(request, 2);
25+
26+
return <ChildComponent data={data} hasMore={hasMore} loadMore={loadMore} />;
27+
};
28+
29+
const { container, rerender } = render(<Component />);
30+
31+
await wait(() => {
32+
expect(container).toMatchSnapshot();
33+
});
34+
35+
await wait(() => {
36+
rerender(<Component />);
37+
expect(request.mock.calls.length).toBe(1);
38+
});
39+
});
40+
41+
it("first load (expect hasMore - false)", async () => {
42+
const request = jest.fn(() => Promise.resolve([1]));
43+
44+
const Component = () => {
45+
const { data, hasMore, loadMore } = usePaginatedRequest(request, 2);
46+
47+
return <ChildComponent data={data} hasMore={hasMore} loadMore={loadMore} />;
48+
};
49+
50+
const { container, rerender } = render(<Component />);
51+
52+
await wait(() => {
53+
expect(container).toMatchSnapshot();
54+
});
55+
56+
await wait(() => {
57+
rerender(<Component />);
58+
expect(request.mock.calls.length).toBe(1);
59+
});
60+
});
61+
62+
it("call loadMore", async () => {
63+
const request = jest.fn();
64+
request.mockReturnValueOnce(Promise.resolve([1, 2])).mockReturnValueOnce(Promise.resolve([3, 4]));
65+
66+
const Component = () => {
67+
const { data, hasMore, loadMore } = usePaginatedRequest(request, 2);
68+
69+
return <ChildComponent data={data} hasMore={hasMore} loadMore={loadMore} />;
70+
};
71+
72+
const { container, rerender, getByTestId } = render(<Component />);
73+
74+
await wait(() => {
75+
fireEvent.click(getByTestId("trigger"));
76+
});
77+
78+
await wait(() => {
79+
rerender(<Component />);
80+
});
81+
82+
await wait(() => {
83+
expect(container).toMatchSnapshot();
84+
expect(request.mock.calls.length).toBe(2);
85+
});
86+
});
87+
88+
it("call loadMore (expect hasMore - false)", async () => {
89+
const request = jest.fn();
90+
request.mockReturnValueOnce(Promise.resolve([1, 2])).mockReturnValueOnce(Promise.resolve([3]));
91+
92+
const Component = () => {
93+
const { data, hasMore, loadMore } = usePaginatedRequest(request, 2);
94+
95+
return <ChildComponent data={data} hasMore={hasMore} loadMore={loadMore} />;
96+
};
97+
98+
const { container, rerender, getByTestId } = render(<Component />);
99+
100+
await wait(() => {
101+
fireEvent.click(getByTestId("trigger"));
102+
});
103+
104+
await wait(() => {
105+
rerender(<Component />);
106+
});
107+
108+
await wait(() => {
109+
expect(container).toMatchSnapshot();
110+
expect(request.mock.calls.length).toBe(2);
111+
});
112+
});
113+
});

0 commit comments

Comments
 (0)