-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathvitest.setup.ts
84 lines (72 loc) · 2.64 KB
/
vitest.setup.ts
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
import { afterAll, afterEach, beforeAll, vi } from "vitest";
import { cleanup } from "@testing-library/preact";
import "@testing-library/jest-dom/vitest";
beforeAll(() => {
global.ResizeObserver = vi.fn().mockImplementation(() => ({
observe: vi.fn(),
unobserve: vi.fn(),
disconnect: vi.fn(),
}));
global.MutationObserver = vi.fn().mockImplementation(() => ({
observe: vi.fn(),
disconnect: vi.fn(),
}));
document.elementFromPoint = vi.fn();
})
afterAll(() => {
cleanup();
vi.clearAllMocks();
});
// const sideEffects = {
// document: {
// addEventListener: {
// fn: document.addEventListener,
// refs: [],
// },
// keys: Object.keys(document),
// },
// window: {
// addEventListener: {
// fn: window.addEventListener,
// refs: [],
// },
// keys: Object.keys(window),
// },
// };
// // Lifecycle Hooks
// // -----------------------------------------------------------------------------
// beforeAll(async () => {
// // Spy addEventListener
// ['document', 'window'].forEach(obj => {
// const fn = sideEffects[obj].addEventListener.fn;
// const refs = sideEffects[obj].addEventListener.refs;
// function addEventListenerSpy(type, listener, options) {
// // Store listener reference so it can be removed during reset
// refs.push({ type, listener, options });
// // Call original window.addEventListener
// fn(type, listener, options);
// }
// // Add to default key array to prevent removal during reset
// sideEffects[obj].keys.push('addEventListener');
// // Replace addEventListener with mock
// global[obj].addEventListener = addEventListenerSpy;
// });
// });
// // Reset JSDOM. This attempts to remove side effects from tests, however it does
// // not reset all changes made to globals like the window and document
// // objects. Tests requiring a full JSDOM reset should be stored in separate
// // files, which is only way to do a complete JSDOM reset with Jest.
// afterAll(async () => {
// const rootElm = document.documentElement;
// // Remove global listeners and keys
// ['document', 'window'].forEach(obj => {
// const refs = sideEffects[obj].addEventListener.refs;
// // Listeners
// while (refs.length) {
// const { type, listener, options } = refs.pop();
// global[obj].removeEventListener(type, listener, options);
// }
// });
// // Restore base elements
// rootElm.innerHTML = '<head></head><body></body>';
// });