UNPKG

vitest-localstorage-mock

Version:

Auto mock all localstorage and sessionstorage APIs for your Vitest tests

67 lines (64 loc) 1.83 kB
import { vitest } from 'vitest'; class LocalStorage { constructor(vitest) { Object.defineProperty(this, "getItem", { enumerable: false, value: vitest.fn((key) => this[key] !== void 0 ? this[key] : null) }); Object.defineProperty(this, "setItem", { enumerable: false, // not mentioned in the spec, but we must always coerce to a string value: vitest.fn((key, val) => { this[key] = `${val}`; }) }); Object.defineProperty(this, "removeItem", { enumerable: false, value: vitest.fn((key) => { delete this[key]; }) }); Object.defineProperty(this, "clear", { enumerable: false, value: vitest.fn(() => { Object.keys(this).map((key) => delete this[key]); }) }); Object.defineProperty(this, "toString", { enumerable: false, value: vitest.fn(() => { return "[object Storage]"; }) }); Object.defineProperty(this, "key", { enumerable: false, value: vitest.fn((idx) => Object.keys(this)[idx] || null) }); } // end constructor get length() { return Object.keys(this).length; } // for backwards compatibility get __STORE__() { return this; } } if (typeof globalThis._localStorage !== "undefined") { Object.defineProperty(globalThis, "_localStorage", { value: new LocalStorage(vitest), writable: false }); globalThis.localStorage = globalThis._localStorage; } else { globalThis.localStorage = new LocalStorage(vitest); } if (typeof globalThis._sessionStorage !== "undefined") { Object.defineProperty(globalThis, "_sessionStorage", { value: new LocalStorage(vitest), writable: false }); globalThis.sessionStorage = globalThis._sessionStorage; } else { globalThis.sessionStorage = new LocalStorage(vitest); }