58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { describe, it, expect, beforeEach, vi } from 'vitest'
|
||
|
||
// 内存 Map 模拟 Taro storage(同 tests/unit/family/family.spec.ts 模式)
|
||
const mem = new Map<string, unknown>()
|
||
vi.mock('@/utils/storage', () => ({
|
||
storage: {
|
||
get: <T>(key: string): T | null => (mem.has(key) ? (mem.get(key) as T) : null),
|
||
set: <T>(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()
|
||
})
|
||
})
|