macos-web/tests/cases/15-persistence.test.ts
2026-07-20 14:30:44 +08:00

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 })
})
})