import { describe, it, expect, beforeEach, vi } from 'vitest' // 内存 Map 模拟 Taro storage(同 tests/unit/family/family.spec.ts 模式) const mem = new Map() vi.mock('@/utils/storage', () => ({ storage: { get: (key: string): T | null => (mem.has(key) ? (mem.get(key) as T) : null), set: (key: string, value: T): void => { mem.set(key, value) }, remove: (key: string): void => { mem.delete(key) } } })) import reducer, { setAuth, clearAuth } from '@/store/authSlice' import type { WxUserInfo } from '@/api/auth' const userInfo: WxUserInfo = { userId: 'u-100', userType: 1, avatar: 'https://example.com/a.png', nickName: '张大爷', mobile: '13800000000', gender: 1, region: '深圳市南山区', loginFrom: 'miniapp' } beforeEach(() => { mem.clear() }) describe('authSlice', () => { it('setAuth 写入 token/userId/userInfo,token 落盘', () => { let state = reducer(undefined, { type: 'init' }) state = reducer(state, setAuth({ token: 'tk-1', userInfo })) expect(state.token).toBe('tk-1') expect(state.userId).toBe('u-100') expect(state.userInfo).toEqual(userInfo) expect(mem.get('auth_token')).toBe('tk-1') }) it('setAuth 后 clearAuth 全部清空并移除持久化 token', () => { let state = reducer(undefined, { type: 'init' }) state = reducer(state, setAuth({ token: 'tk-1', userInfo })) state = reducer(state, clearAuth()) expect(state.token).toBeNull() expect(state.userId).toBeNull() expect(state.userInfo).toBeNull() expect(mem.has('auth_token')).toBe(false) }) it('初始态从 storage 恢复 token', () => { mem.set('auth_token', 'tk-saved') const state = reducer(undefined, { type: 'init' }) expect(state.token).toBe('tk-saved') expect(state.userInfo).toBeNull() }) })