vitest-localstorage-mock
Version:
Auto mock all localstorage and sessionstorage APIs for your Vitest tests
67 lines (64 loc) • 1.83 kB
JavaScript
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);
}