forked from ant-design/ant-design
-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.tsx
92 lines (72 loc) · 2.4 KB
/
utils.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import type { ReactElement } from 'react';
import React, { createRef, StrictMode } from 'react';
import type { RenderOptions } from '@testing-library/react';
import { act, render } from '@testing-library/react';
import MockDate from 'mockdate';
import { _rs as onEsResize } from 'rc-resize-observer/es/utils/observerUtil';
import { _rs as onLibResize } from 'rc-resize-observer/lib/utils/observerUtil';
export function assertsExist<T>(item?: T): asserts item is T {
expect(item).not.toBeUndefined();
expect(item).not.toBeNull();
}
export function setMockDate(dateString = '2017-09-18T03:30:07.795') {
MockDate.set(dateString);
}
export function resetMockDate() {
MockDate.reset();
}
const globalTimeout = global.setTimeout;
export const sleep = async (timeout = 0) => {
await act(async () => {
await new Promise((resolve) => {
globalTimeout(resolve, timeout);
});
});
};
const customRender = (ui: ReactElement, options?: Omit<RenderOptions, 'wrapper'>) =>
render(ui, { wrapper: StrictMode, ...options });
export function renderHook<T>(func: () => T): { result: React.RefObject<T> } {
const result = createRef<T>();
const Demo: React.FC = () => {
(result as any).current = func();
return null;
};
customRender(<Demo />);
return { result };
}
/**
* Pure render like `@testing-lib` render which will not wrap with StrictMode.
*
* Please only use with render times times of memo usage case.
*/
const pureRender = render;
export { pureRender, customRender as render };
export const triggerResize = (target: Element) => {
const originGetBoundingClientRect = target.getBoundingClientRect;
target.getBoundingClientRect = () => ({ width: 510, height: 903 }) as DOMRect;
act(() => {
onLibResize([{ target } as ResizeObserverEntry]);
onEsResize([{ target } as ResizeObserverEntry]);
});
target.getBoundingClientRect = originGetBoundingClientRect;
};
/**
* Wait for a time delay. Will wait `advanceTime * times` ms.
*
* @param advanceTime Default 1000
* @param times Default 20
*/
export async function waitFakeTimer(advanceTime = 1000, times = 20) {
for (let i = 0; i < times; i += 1) {
// eslint-disable-next-line no-await-in-loop
await act(async () => {
await Promise.resolve();
if (advanceTime > 0) {
jest.advanceTimersByTime(advanceTime);
} else {
jest.runAllTimers();
}
});
}
}
export * from '@testing-library/react';