114 lines
2.2 KiB
JavaScript
114 lines
2.2 KiB
JavaScript
import { afterEach, beforeEach, vi } from "vitest";
|
|
import { enableAutoUnmount } from "@vue/test-utils";
|
|
|
|
enableAutoUnmount(afterEach);
|
|
|
|
class TestResizeObserver {
|
|
observe() {}
|
|
unobserve() {}
|
|
disconnect() {}
|
|
}
|
|
|
|
class TestIntersectionObserver {
|
|
observe() {}
|
|
unobserve() {}
|
|
disconnect() {}
|
|
takeRecords() {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
function createMatchMedia(query) {
|
|
return {
|
|
matches: false,
|
|
media: query,
|
|
onchange: null,
|
|
addListener() {},
|
|
removeListener() {},
|
|
addEventListener() {},
|
|
removeEventListener() {},
|
|
dispatchEvent() {
|
|
return false;
|
|
},
|
|
};
|
|
}
|
|
|
|
function ensureBrowserMocks() {
|
|
if (!globalThis.ResizeObserver) {
|
|
globalThis.ResizeObserver = TestResizeObserver;
|
|
}
|
|
|
|
if (!globalThis.IntersectionObserver) {
|
|
globalThis.IntersectionObserver = TestIntersectionObserver;
|
|
}
|
|
|
|
if (globalThis.window) {
|
|
if (!window.matchMedia) {
|
|
Object.defineProperty(window, "matchMedia", {
|
|
configurable: true,
|
|
writable: true,
|
|
value: createMatchMedia,
|
|
});
|
|
}
|
|
|
|
if (!window.scrollTo) {
|
|
Object.defineProperty(window, "scrollTo", {
|
|
configurable: true,
|
|
writable: true,
|
|
value() {},
|
|
});
|
|
}
|
|
}
|
|
|
|
if (globalThis.URL) {
|
|
if (!URL.createObjectURL) {
|
|
Object.defineProperty(URL, "createObjectURL", {
|
|
configurable: true,
|
|
writable: true,
|
|
value: vi.fn(() => "blob:vitest-object-url"),
|
|
});
|
|
}
|
|
|
|
if (!URL.revokeObjectURL) {
|
|
Object.defineProperty(URL, "revokeObjectURL", {
|
|
configurable: true,
|
|
writable: true,
|
|
value: vi.fn(),
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
function clearStorage(storage) {
|
|
try {
|
|
storage?.clear();
|
|
} catch {
|
|
// Some jsdom URL modes can make storage unavailable.
|
|
}
|
|
}
|
|
|
|
beforeEach(() => {
|
|
ensureBrowserMocks();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await Promise.resolve();
|
|
await Promise.resolve();
|
|
|
|
vi.clearAllTimers();
|
|
vi.useRealTimers();
|
|
vi.clearAllMocks();
|
|
vi.unstubAllGlobals();
|
|
|
|
if (globalThis.document?.body) {
|
|
document.body.innerHTML = "";
|
|
}
|
|
|
|
if (globalThis.window) {
|
|
clearStorage(window.localStorage);
|
|
clearStorage(window.sessionStorage);
|
|
}
|
|
|
|
ensureBrowserMocks();
|
|
});
|