token
ts
const TokenKey = 'mg-token'
/**
* 获取存储在浏览器中的令牌。
*
* @returns {string | null} 如果存在令牌,则返回令牌字符串;否则返回null。
*/
export function getToken(): string | null {
return sessionStorage.getItem(TokenKey) || localStorage.getItem(TokenKey)
}
/**
* 设置令牌
*
* @param {string} token - 需要存储的令牌字符串。
* @param {boolean} remember - 指示是否在会话结束后仍保留令牌的布尔值。
*/
export function setToken(token: string, remember: boolean): void {
// 根据remember参数的值,选择使用localStorage或sessionStorage来存储token
if (remember) {
// 保存到 localStorage
localStorage.setItem(TokenKey, token)
} else {
// 保存到 sessionStorage
sessionStorage.setItem(TokenKey, token)
}
}
/**
* 从浏览器存储中移除令牌。
*/
export function removeToken(): void {
sessionStorage.removeItem(TokenKey)
localStorage.removeItem(TokenKey)
}ts
import { describe, it, expect, beforeEach, afterEach } from 'vitest'
import { getToken, setToken, removeToken } from '../index'
/**
* @vitest-environment jsdom
*/
describe('Token Functions', () => {
beforeEach(() => {
// 在每个测试前清空 storage
sessionStorage.clear()
localStorage.clear()
})
afterEach(() => {
// 在每个测试后清空 storage
sessionStorage.clear()
localStorage.clear()
})
describe('getToken', () => {
it('1. 应对 sessionStorage 和 localStorage 中都没有 token 时返回 null', () => {
expect(getToken()).toBeNull()
})
it('2. 应对 sessionStorage 中有 token 时返回 token', () => {
sessionStorage.setItem('mg-token', 'session-token')
expect(getToken()).toBe('session-token')
})
it('3. 应对 localStorage 中有 token 时返回 token', () => {
localStorage.setItem('mg-token', 'local-token')
expect(getToken()).toBe('local-token')
})
it('4. 应对 sessionStorage 和 localStorage 中都有 token 时返回 sessionStorage 中的 token', () => {
sessionStorage.setItem('mg-token', 'session-token')
localStorage.setItem('mg-token', 'local-token')
expect(getToken()).toBe('session-token')
})
})
describe('setToken', () => {
it('5. 应对 remember 为 true 时将 token 存入 localStorage', () => {
setToken('local-token', true)
expect(localStorage.getItem('mg-token')).toBe('local-token')
expect(sessionStorage.getItem('mg-token')).toBeNull()
})
it('6. 应对 remember 为 false 时将 token 存入 sessionStorage', () => {
setToken('session-token', false)
expect(sessionStorage.getItem('mg-token')).toBe('session-token')
expect(localStorage.getItem('mg-token')).toBeNull()
})
})
describe('removeToken', () => {
it('7. 应能成功移除 sessionStorage 和 localStorage 中的 token', () => {
sessionStorage.setItem('mg-token', 'session-token')
localStorage.setItem('mg-token', 'local-token')
removeToken()
expect(sessionStorage.getItem('mg-token')).toBeNull()
expect(localStorage.getItem('mg-token')).toBeNull()
})
})
})