import { afterEach, describe, expect, it, vi } from 'vitest' import { __getItem, __removeItem, __setItem } from '../../../script/storage' describe('storage helpers', () => { const originalInfo = (window as any).info afterEach(() => { window.sessionStorage.clear() window.localStorage.clear() if (originalInfo === undefined) { delete (window as any).info } else { ;(window as any).info = originalInfo } vi.restoreAllMocks() }) it('__setItem 默认写入 sessionStorage,并把对象序列化', () => { __setItem('profile', { name: 'tom', age: 18 }) expect(window.sessionStorage.getItem('profile')).toBe('{"name":"tom","age":18}') expect(window.localStorage.getItem('profile')).toBeNull() }) it('__setItem 传入字符串时保持原值,并支持 localStorage', () => { __setItem('token', 'plain-text', 'localStorage') expect(window.localStorage.getItem('token')).toBe('plain-text') }) it('__setItem 传 x-auth-token 时会改写为 info.storageToken 并写入 localStorage', () => { ;(window as any).info = { storageToken: 'custom-token' } __setItem('x-auth-token', 'bearer token') expect(window.localStorage.getItem('custom-token')).toBe('bearer token') expect(window.sessionStorage.getItem('x-auth-token')).toBeNull() }) it('__getItem 能读取并反序列化 JSON 字符串', () => { window.sessionStorage.setItem('profile', '{"name":"tom","age":18}') expect(__getItem('profile')).toEqual({ name: 'tom', age: 18 }) }) it('__getItem 遇到普通字符串时返回原始值', () => { window.localStorage.setItem('token', 'plain-text') expect(__getItem('token', 'localStorage')).toBe('plain-text') }) it('__getItem 传 x-auth-token 时会从 info.storageToken 对应的 localStorage 读取', () => { ;(window as any).info = { storageToken: 'custom-token' } window.localStorage.setItem('custom-token', '{"id":1}') expect(__getItem('x-auth-token')).toEqual({ id: 1 }) }) it('__removeItem 会删除 sessionStorage 和 localStorage 中的值', () => { window.sessionStorage.setItem('profile', '1') window.localStorage.setItem('token', '2') __removeItem('profile') __removeItem('token', 'localStorage') expect(window.sessionStorage.getItem('profile')).toBeNull() expect(window.localStorage.getItem('token')).toBeNull() }) it('name 为空时三个方法都会抛出异常', () => { expect(() => __setItem('', 'value')).toThrow('缓存名字不存在') expect(() => __getItem('', 'localStorage')).toThrow('缓存名字不存在') expect(() => __removeItem('', 'sessionStorage')).toThrow('缓存名字不存在') }) it('type 非法时三个方法都会抛出异常', () => { expect(() => __setItem('name', 'value', 'cookie' as any)).toThrow('sessionStorage 或者 localStorage') expect(() => __getItem('name', 'cookie' as any)).toThrow('sessionStorage 或者 localStorage') expect(() => __removeItem('name', 'cookie' as any)).toThrow('sessionStorage 或者 localStorage') }) })