-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.setup.ts
56 lines (43 loc) · 1.28 KB
/
test.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
// noinspection JSConstantReassignment
import { afterAll, afterEach, beforeAll, mock } from "bun:test";
// @ts-ignore
import JSDOM from "jsdom";
const globalProperties: any[] = [];
mock.module("@laserware/arcade", () => ({
isPlatform: (platform: string) => platform === "mac",
}));
beforeAll(() => {
const jsdom = new JSDOM.JSDOM(
`<!doctype html><html><head><meta charset="utf-8"></head><body></body></html>`,
{
pretendToBeVisual: true,
url: "http://localhost:3000",
},
);
const { window } = jsdom;
const { document } = window;
if (globalProperties.length === 0) {
const windowProperties = Object.getOwnPropertyNames(window);
const validProperties = windowProperties.filter(
(property) => !property.startsWith("_") && !(property in global),
);
globalProperties.push(...validProperties);
}
for (const globalProperty of globalProperties) {
// @ts-ignore
global[globalProperty] = window[globalProperty];
}
global.document = document;
global.window = window;
window.console = global.console;
});
afterAll(() => {
for (const globalProperty of globalProperties) {
// @ts-ignore
delete global[globalProperty];
}
});
// Ensures the DOM is clear after each test.
afterEach(() => {
document.body.innerHTML = "";
});