Skip to content

Commit 5b71de2

Browse files
committed
test(shared/hooks): useOldValue
1 parent 38f0c6d commit 5b71de2

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { renderHook, act } from '@testing-library/react';
2+
import { useDeferredValue, useState } from 'react';
3+
import { useOldValue } from '@pkg/shared';
4+
5+
describe('useOldValue', () => {
6+
it('useDeferredValue', () => {
7+
let value;
8+
let times = 0;
9+
const { result } = renderHook(() => {
10+
const [v, sv] = useState(1);
11+
const oldV = useDeferredValue(v);
12+
value = v;
13+
times++;
14+
return [oldV, sv] as const;
15+
});
16+
17+
const [, setValue] = result.current;
18+
expect(result.current[0]).toBe(1);
19+
expect(times).toBe(1);
20+
21+
act(() => setValue(2));
22+
expect(result.current[0]).toBe(2);
23+
expect(value).toBe(2);
24+
expect(times).toBe(3);
25+
26+
act(() => {
27+
setValue(2);
28+
setValue(3);
29+
setValue(4);
30+
setValue(5);
31+
});
32+
expect(result.current[0]).toBe(5);
33+
expect(value).toBe(5);
34+
expect(times).toBe(5);
35+
});
36+
it('useOldValue', () => {
37+
let value;
38+
let times = 0;
39+
const { result } = renderHook(() => {
40+
const [v, sv] = useState(1);
41+
const oldV = useOldValue(v);
42+
value = v;
43+
times++;
44+
return [oldV, sv] as const;
45+
});
46+
47+
const [, setValue] = result.current;
48+
// 跟 useDeferredValue 不一样,useDeferredValue 初始值跟原值一样
49+
expect(result.current[0]).toBe(undefined);
50+
51+
act(() => setValue(2));
52+
// 跟 useDeferredValue 不一样,因为它自己触发了一次更新,所以跟原值一样
53+
expect(result.current[0]).toBe(1);
54+
expect(value).toBe(2);
55+
expect(times).toBe(2);
56+
57+
act(() => {
58+
setValue(2);
59+
setValue(3);
60+
setValue(4);
61+
setValue(5);
62+
});
63+
expect(result.current[0]).toBe(2);
64+
expect(value).toBe(5);
65+
expect(times).toBe(3);
66+
});
67+
});

0 commit comments

Comments
 (0)