-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathuseGrid.test.tsx
More file actions
71 lines (58 loc) · 1.95 KB
/
Copy pathuseGrid.test.tsx
File metadata and controls
71 lines (58 loc) · 1.95 KB
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
import { render, waitFor } from '@testing-library/react';
import { StrictMode } from 'react';
import { describe, it, expect } from 'vitest';
import { BaseGrid } from '../components/BaseGrid';
import type { GridType, GridInstance } from './useGrid';
type TestOptions = { label?: string };
interface DeferredInit {
id: number;
resolve: () => Promise<void>;
}
function createDeferredGrid(initQueue: DeferredInit[]): GridType<TestOptions> {
let nextId = 0;
return {
grid(container, _options, async) {
const id = ++nextId;
const grid: GridInstance<TestOptions> = {
destroy: () => {
container.innerHTML = '';
},
update: () => {}
};
if (!async) {
container.innerHTML = `<div data-grid-id="${id}">grid</div>`;
return grid;
}
return new Promise((resolve) => {
const resolveInit = async () => {
container.innerHTML = `<div data-grid-id="${id}">grid</div>`;
resolve(grid);
await Promise.resolve();
};
initQueue.push({
id,
resolve: resolveInit
});
});
}
};
}
describe('useGrid', () => {
it('keeps the active grid when StrictMode double-inits', async () => {
const initQueue: DeferredInit[] = [];
const Grid = createDeferredGrid(initQueue);
const { container } = render(
<StrictMode>
<BaseGrid options={{}} Grid={Grid} />
</StrictMode>
);
await waitFor(() => {
expect(initQueue).toHaveLength(1);
});
const [firstInit] = initQueue;
await firstInit.resolve();
await waitFor(() => {
expect(container.querySelector('[data-grid-id="1"]')).not.toBeNull();
});
});
});