151 lines
4.9 KiB
TypeScript
151 lines
4.9 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
import { Storage } from "@/utils/storage";
|
|
import { STORAGE_KEYS, APP_PREFIX } from "@/constants";
|
|
|
|
describe("Storage 工具类", () => {
|
|
// 每个测试前清理存储
|
|
beforeEach(() => {
|
|
localStorage.clear();
|
|
sessionStorage.clear();
|
|
});
|
|
|
|
// 每个测试后清理存储
|
|
afterEach(() => {
|
|
localStorage.clear();
|
|
sessionStorage.clear();
|
|
});
|
|
|
|
describe("localStorage 操作", () => {
|
|
it("应该能够存储和获取字符串", () => {
|
|
Storage.set("test-key", "test-value");
|
|
expect(Storage.get("test-key")).toBe("test-value");
|
|
});
|
|
|
|
it("应该能够存储和获取对象", () => {
|
|
const testObj = { name: "张三", age: 25 };
|
|
Storage.set("test-obj", testObj);
|
|
expect(Storage.get("test-obj")).toEqual(testObj);
|
|
});
|
|
|
|
it("应该能够存储和获取数组", () => {
|
|
const testArr = [1, 2, 3, 4, 5];
|
|
Storage.set("test-arr", testArr);
|
|
expect(Storage.get("test-arr")).toEqual(testArr);
|
|
});
|
|
|
|
it("应该能够存储和获取布尔值", () => {
|
|
Storage.set("test-bool", true);
|
|
expect(Storage.get("test-bool")).toBe(true);
|
|
});
|
|
|
|
it("获取不存在的键应该返回 undefined", () => {
|
|
expect(Storage.get("non-existent")).toBeUndefined();
|
|
});
|
|
|
|
it("获取不存在的键应该返回默认值", () => {
|
|
expect(Storage.get("non-existent", "default")).toBe("default");
|
|
});
|
|
|
|
it("应该能够删除存储项", () => {
|
|
Storage.set("test-key", "test-value");
|
|
Storage.remove("test-key");
|
|
expect(Storage.get("test-key")).toBeUndefined();
|
|
});
|
|
});
|
|
|
|
describe("sessionStorage 操作", () => {
|
|
it("应该能够存储和获取字符串", () => {
|
|
Storage.sessionSet("test-key", "test-value");
|
|
expect(Storage.sessionGet("test-key")).toBe("test-value");
|
|
});
|
|
|
|
it("应该能够存储和获取对象", () => {
|
|
const testObj = { name: "李四", age: 30 };
|
|
Storage.sessionSet("test-obj", testObj);
|
|
expect(Storage.sessionGet("test-obj")).toEqual(testObj);
|
|
});
|
|
|
|
it("获取不存在的键应该返回默认值", () => {
|
|
expect(Storage.sessionGet("non-existent", "default")).toBe("default");
|
|
});
|
|
|
|
it("应该能够删除存储项", () => {
|
|
Storage.sessionSet("test-key", "test-value");
|
|
Storage.sessionRemove("test-key");
|
|
expect(Storage.sessionGet("test-key")).toBeUndefined();
|
|
});
|
|
});
|
|
|
|
describe("批量清理操作", () => {
|
|
it("clear() 应该同时清理 localStorage 和 sessionStorage", () => {
|
|
Storage.set("test-key", "local-value");
|
|
Storage.sessionSet("test-key", "session-value");
|
|
|
|
Storage.clear("test-key");
|
|
|
|
expect(Storage.get("test-key")).toBeUndefined();
|
|
expect(Storage.sessionGet("test-key")).toBeUndefined();
|
|
});
|
|
|
|
it("clearMultiple() 应该批量清理多个键", () => {
|
|
Storage.set("key1", "value1");
|
|
Storage.set("key2", "value2");
|
|
Storage.sessionSet("key1", "session1");
|
|
|
|
Storage.clearMultiple(["key1", "key2"]);
|
|
|
|
expect(Storage.get("key1")).toBeUndefined();
|
|
expect(Storage.get("key2")).toBeUndefined();
|
|
expect(Storage.sessionGet("key1")).toBeUndefined();
|
|
});
|
|
|
|
it("clearByPrefix() 应该清理指定前缀的所有存储项", () => {
|
|
Storage.set(`${APP_PREFIX}:auth:token`, "token123");
|
|
Storage.set(`${APP_PREFIX}:auth:user`, "user123");
|
|
Storage.set(`${APP_PREFIX}:ui:theme`, "dark");
|
|
Storage.set("other:key", "other-value");
|
|
|
|
Storage.clearByPrefix(`${APP_PREFIX}:auth:`);
|
|
|
|
expect(Storage.get(`${APP_PREFIX}:auth:token`)).toBeUndefined();
|
|
expect(Storage.get(`${APP_PREFIX}:auth:user`)).toBeUndefined();
|
|
expect(Storage.get(`${APP_PREFIX}:ui:theme`)).toBe("dark");
|
|
expect(Storage.get("other:key")).toBe("other-value");
|
|
});
|
|
|
|
it("clearAllProject() 应该清理所有项目相关的存储", () => {
|
|
Storage.set(STORAGE_KEYS.ACCESS_TOKEN, "token123");
|
|
Storage.set(STORAGE_KEYS.THEME, "dark");
|
|
Storage.set("other:key", "other-value");
|
|
|
|
Storage.clearAllProject();
|
|
|
|
expect(Storage.get(STORAGE_KEYS.ACCESS_TOKEN)).toBeUndefined();
|
|
expect(Storage.get(STORAGE_KEYS.THEME)).toBeUndefined();
|
|
expect(Storage.get("other:key")).toBe("other-value");
|
|
});
|
|
});
|
|
|
|
describe("边界情况", () => {
|
|
it("应该能够处理 null 值", () => {
|
|
Storage.set("test-null", null);
|
|
expect(Storage.get("test-null")).toBeNull();
|
|
});
|
|
|
|
it("应该能够处理空字符串", () => {
|
|
Storage.set("test-empty", "");
|
|
expect(Storage.get("test-empty")).toBe("");
|
|
});
|
|
|
|
it("应该能够处理数字 0", () => {
|
|
Storage.set("test-zero", 0);
|
|
expect(Storage.get("test-zero")).toBe(0);
|
|
});
|
|
|
|
it("应该能够处理 false", () => {
|
|
Storage.set("test-false", false);
|
|
expect(Storage.get("test-false")).toBe(false);
|
|
});
|
|
});
|
|
});
|