carbon-components-svelte/tests/setup-tests.ts

83 lines
2 KiB
TypeScript

/// <reference types="vitest/globals" />
import "@testing-library/jest-dom/vitest";
import { userEvent } from "@testing-library/user-event";
// Mock scrollIntoView since it's not implemented in JSDOM
Element.prototype.scrollIntoView = vi.fn();
// Mock ResizeObserver since it's not implemented in JSDOM
class ResizeObserverMock {
callback: ResizeObserverCallback;
elements: Element[];
constructor(callback: ResizeObserverCallback) {
this.callback = callback;
this.elements = [];
}
observe(element: Element) {
this.elements.push(element);
this.callback(
[
{
target: element,
contentRect: { height: 100 } as DOMRectReadOnly,
borderBoxSize: [],
contentBoxSize: [],
devicePixelContentBoxSize: [],
},
],
this,
);
}
unobserve(element: Element) {
this.elements = this.elements.filter((el) => el !== element);
}
disconnect() {
this.elements = [];
}
}
global.ResizeObserver = ResizeObserverMock;
export const user = userEvent.setup();
export const setupLocalStorageMock = () => {
let localStorageMock: { [key: string]: string } = {};
let originalLocalStorage: Storage;
beforeEach(() => {
originalLocalStorage = global.localStorage;
localStorageMock = {};
global.localStorage = {
getItem: vi.fn((key) => localStorageMock[key] || null),
setItem: vi.fn((key, value) => {
localStorageMock[key] = value;
}),
removeItem: vi.fn((key) => {
delete localStorageMock[key];
}),
clear: vi.fn(() => {
localStorageMock = {};
}),
length: 0,
key: vi.fn(),
};
});
afterEach(() => {
global.localStorage = originalLocalStorage;
localStorage.clear();
vi.restoreAllMocks();
localStorageMock = {};
});
return {
setMockItem: (key: string, value: string) => {
localStorageMock[key] = value;
},
getMockItem: (key: string) => localStorageMock[key],
};
};