test: fix component tests by adding localStorage mock and resolving store interference
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import { vi } from 'vitest';
|
||||
|
||||
// jsdom lacks ResizeObserver
|
||||
global.ResizeObserver = class {
|
||||
observe = vi.fn();
|
||||
unobserve = vi.fn();
|
||||
disconnect = vi.fn();
|
||||
} as unknown as typeof ResizeObserver;
|
||||
|
||||
// jsdom lacks Web Animations API
|
||||
Element.prototype.animate = vi.fn().mockReturnValue({
|
||||
onfinish: null,
|
||||
cancel: vi.fn(),
|
||||
finish: vi.fn(),
|
||||
pause: vi.fn(),
|
||||
play: vi.fn(),
|
||||
});
|
||||
|
||||
// jsdom lacks SVG geometry methods
|
||||
SVGElement.prototype.getTotalLength = vi.fn(() => 0);
|
||||
|
||||
// Robust localStorage mock for jsdom environment
|
||||
const localStorageMock = (() => {
|
||||
let store: Record<string, string> = {};
|
||||
return {
|
||||
getItem: vi.fn((key: string) => store[key] || null),
|
||||
setItem: vi.fn((key: string, value: string) => {
|
||||
store[key] = value.toString();
|
||||
}),
|
||||
removeItem: vi.fn((key: string) => {
|
||||
delete store[key];
|
||||
}),
|
||||
clear: vi.fn(() => {
|
||||
store = {};
|
||||
}),
|
||||
key: vi.fn((index: number) => Object.keys(store)[index] || null),
|
||||
get length() {
|
||||
return Object.keys(store).length;
|
||||
},
|
||||
};
|
||||
})();
|
||||
|
||||
Object.defineProperty(window, 'localStorage', {
|
||||
value: localStorageMock,
|
||||
writable: true,
|
||||
});
|
||||
Reference in New Issue
Block a user