46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
/**
|
|
* 15-persistence: localStorage 持久化
|
|
*/
|
|
import { describe, it, expect, beforeEach } from 'vitest'
|
|
import { store } from '../../src/composables/useStore'
|
|
|
|
describe('15-persistence — localStorage 持久化', () => {
|
|
beforeEach(() => {
|
|
localStorage.clear()
|
|
})
|
|
|
|
it('get 带 fallback 返回默认值', () => {
|
|
const val = store.get('nonexistent', { hello: 'world' })
|
|
expect(val).toEqual({ hello: 'world' })
|
|
})
|
|
|
|
it('set 后 get 返回正确值', () => {
|
|
store.set('test-key', { a: 1, b: [2, 3] })
|
|
const val = store.get('test-key', null)
|
|
expect(val).toEqual({ a: 1, b: [2, 3] })
|
|
})
|
|
|
|
it('remove 后 get 返回 fallback', () => {
|
|
store.set('test-key', 'value')
|
|
store.remove('test-key')
|
|
const val = store.get('test-key', 'fallback')
|
|
expect(val).toBe('fallback')
|
|
})
|
|
|
|
it('clearAll 清除所有带前缀的键', () => {
|
|
store.set('key1', 'a')
|
|
store.set('key2', 'b')
|
|
localStorage.setItem('other-key', 'keep-me')
|
|
store.clearAll()
|
|
expect(store.get('key1', null)).toBeNull()
|
|
expect(store.get('key2', null)).toBeNull()
|
|
expect(localStorage.getItem('other-key')).toBe('keep-me')
|
|
})
|
|
|
|
it('损坏数据回退默认值', () => {
|
|
localStorage.setItem(store.PREFIX + 'bad', '{invalid json')
|
|
const val = store.get('bad', { ok: true })
|
|
expect(val).toEqual({ ok: true })
|
|
})
|
|
})
|