47 lines
1.1 KiB
TypeScript
47 lines
1.1 KiB
TypeScript
import type { Window as HappyDOMWindow } from "happy-dom";
|
|
|
|
function createLocalStorageMock(): Storage {
|
|
const store = new Map<string, string>();
|
|
|
|
return {
|
|
get length() {
|
|
return store.size;
|
|
},
|
|
clear() {
|
|
store.clear();
|
|
},
|
|
getItem(key: string) {
|
|
return store.has(key) ? (store.get(key) ?? null) : null;
|
|
},
|
|
key(index: number) {
|
|
return Array.from(store.keys())[index] ?? null;
|
|
},
|
|
removeItem(key: string) {
|
|
store.delete(key);
|
|
},
|
|
setItem(key: string, value: string) {
|
|
store.set(key, value);
|
|
},
|
|
};
|
|
}
|
|
|
|
const localStorageMock = createLocalStorageMock();
|
|
|
|
Object.defineProperty(globalThis, "localStorage", {
|
|
configurable: true,
|
|
value: localStorageMock,
|
|
});
|
|
|
|
if (typeof window !== "undefined") {
|
|
const happyDOMWindow = window as unknown as HappyDOMWindow;
|
|
happyDOMWindow.happyDOM.settings.fetch.interceptor = {
|
|
beforeAsyncRequest: ({ window: requestWindow }) =>
|
|
Promise.resolve(new requestWindow.Response(null, { status: 404 })),
|
|
};
|
|
|
|
Object.defineProperty(window, "localStorage", {
|
|
configurable: true,
|
|
value: localStorageMock,
|
|
});
|
|
}
|