mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-14 18:01:06 +00:00
test(local-storage): extract shared global mock
This commit is contained in:
parent
220f6f833b
commit
c540fa8b68
3 changed files with 50 additions and 63 deletions
|
@ -1,35 +1,9 @@
|
||||||
import { render } from "@testing-library/svelte";
|
import { render } from "@testing-library/svelte";
|
||||||
|
import { setupLocalStorageMock } from "../setup-tests";
|
||||||
import LocalStorage from "./LocalStorage.test.svelte";
|
import LocalStorage from "./LocalStorage.test.svelte";
|
||||||
|
|
||||||
describe("LocalStorage", () => {
|
describe("LocalStorage", () => {
|
||||||
let localStorageMock: { [key: string]: string };
|
const { setMockItem } = setupLocalStorageMock();
|
||||||
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 = {};
|
|
||||||
});
|
|
||||||
|
|
||||||
it("saves primitive value to localStorage on mount", () => {
|
it("saves primitive value to localStorage on mount", () => {
|
||||||
render(LocalStorage);
|
render(LocalStorage);
|
||||||
|
@ -50,7 +24,7 @@ describe("LocalStorage", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("loads existing primitive value from localStorage", () => {
|
it("loads existing primitive value from localStorage", () => {
|
||||||
localStorageMock["local-storage-key"] = "existing-value";
|
setMockItem("local-storage-key", "existing-value");
|
||||||
|
|
||||||
render(LocalStorage);
|
render(LocalStorage);
|
||||||
expect(localStorage.getItem).toHaveBeenCalledWith("local-storage-key");
|
expect(localStorage.getItem).toHaveBeenCalledWith("local-storage-key");
|
||||||
|
@ -59,7 +33,7 @@ describe("LocalStorage", () => {
|
||||||
it("loads existing object value from localStorage", () => {
|
it("loads existing object value from localStorage", () => {
|
||||||
// Set up existing value
|
// Set up existing value
|
||||||
const existingSettings = { theme: "light", fontSize: 14 };
|
const existingSettings = { theme: "light", fontSize: 14 };
|
||||||
localStorageMock["theme-settings"] = JSON.stringify(existingSettings);
|
setMockItem("theme-settings", JSON.stringify(existingSettings));
|
||||||
|
|
||||||
render(LocalStorage);
|
render(LocalStorage);
|
||||||
expect(localStorage.getItem).toHaveBeenCalledWith("theme-settings");
|
expect(localStorage.getItem).toHaveBeenCalledWith("theme-settings");
|
||||||
|
@ -87,7 +61,7 @@ describe("LocalStorage", () => {
|
||||||
|
|
||||||
it("handles JSON parse errors gracefully", () => {
|
it("handles JSON parse errors gracefully", () => {
|
||||||
// Set up invalid JSON
|
// Set up invalid JSON
|
||||||
localStorageMock["local-storage-key"] = "{invalid-json}";
|
setMockItem("local-storage-key", "{invalid-json}");
|
||||||
|
|
||||||
render(LocalStorage);
|
render(LocalStorage);
|
||||||
expect(localStorage.getItem).toHaveBeenCalledWith("local-storage-key");
|
expect(localStorage.getItem).toHaveBeenCalledWith("local-storage-key");
|
||||||
|
|
|
@ -1,47 +1,22 @@
|
||||||
import { render } from "@testing-library/svelte";
|
import { render } from "@testing-library/svelte";
|
||||||
|
import { setupLocalStorageMock } from "../setup-tests";
|
||||||
import LocalStoragePrimitive from "./LocalStoragePrimitive.test.svelte";
|
import LocalStoragePrimitive from "./LocalStoragePrimitive.test.svelte";
|
||||||
|
|
||||||
describe("LocalStorage - Primitive Values", () => {
|
describe("LocalStorage - Primitive Values", () => {
|
||||||
let localStorageMock: { [key: string]: string };
|
const { setMockItem } = setupLocalStorageMock();
|
||||||
let originalLocalStorage: Storage;
|
let consoleLog: ReturnType<typeof vi.spyOn>;
|
||||||
let consoleSpy: any;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
originalLocalStorage = global.localStorage;
|
consoleLog = vi.spyOn(console, "log");
|
||||||
localStorageMock = {};
|
|
||||||
consoleSpy = vi.spyOn(console, "log");
|
|
||||||
|
|
||||||
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 = {};
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("saves primitive value to localStorage on mount", () => {
|
it("saves primitive value to localStorage on mount", () => {
|
||||||
render(LocalStoragePrimitive);
|
render(LocalStoragePrimitive);
|
||||||
|
|
||||||
expect(localStorage.setItem).toHaveBeenCalledWith("test-key", "test-value");
|
expect(localStorage.setItem).toHaveBeenCalledWith("test-key", "test-value");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("loads existing primitive value from localStorage", () => {
|
it("loads existing primitive value from localStorage", () => {
|
||||||
localStorageMock["test-key"] = "existing-value";
|
setMockItem("test-key", "existing-value");
|
||||||
|
|
||||||
render(LocalStoragePrimitive);
|
render(LocalStoragePrimitive);
|
||||||
expect(localStorage.getItem).toHaveBeenCalledWith("test-key");
|
expect(localStorage.getItem).toHaveBeenCalledWith("test-key");
|
||||||
|
@ -49,11 +24,11 @@ describe("LocalStorage - Primitive Values", () => {
|
||||||
|
|
||||||
it("dispatches save event when setting initial value", () => {
|
it("dispatches save event when setting initial value", () => {
|
||||||
render(LocalStoragePrimitive);
|
render(LocalStoragePrimitive);
|
||||||
expect(consoleSpy).toHaveBeenCalledWith("save event");
|
expect(consoleLog).toHaveBeenCalledWith("save event");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("handles invalid values gracefully", () => {
|
it("handles invalid values gracefully", () => {
|
||||||
localStorageMock["test-key"] = "{invalid-value}";
|
setMockItem("test-key", "{invalid-value}");
|
||||||
|
|
||||||
render(LocalStoragePrimitive);
|
render(LocalStoragePrimitive);
|
||||||
expect(localStorage.getItem).toHaveBeenCalledWith("test-key");
|
expect(localStorage.getItem).toHaveBeenCalledWith("test-key");
|
||||||
|
|
|
@ -43,3 +43,41 @@ class ResizeObserverMock {
|
||||||
global.ResizeObserver = ResizeObserverMock;
|
global.ResizeObserver = ResizeObserverMock;
|
||||||
|
|
||||||
export const user = userEvent.setup();
|
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],
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue