/
index.test.ts
100 lines (76 loc) · 2.32 KB
/
index.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import { promiseTimeout } from '@vueuse/shared'
import { get, set } from 'idb-keyval'
import { useIDBKeyval } from '.'
const cache = {} as any
vi.mock('idb-keyval', () => ({
get: (key: string) => Promise.resolve(cache[key]),
set: (key: string, value: any) => new Promise((resolve, reject) => {
if (value === 'error') {
reject(new Error('set error'))
return
}
cache[key] = value
resolve(undefined)
}),
update: (key: string, updater: () => any) => new Promise((resolve, reject) => {
const value = updater()
if (value === 'error') {
reject(new Error('update error'))
return
}
cache[key] = value
resolve(undefined)
}),
del: (key: string) => {
delete cache[key]
},
}))
const KEY1 = 'vue-use-idb-keyval-1'
const KEY2 = 'vue-use-idb-keyval-2'
const KEY3 = 'vue-use-idb-keyval-3'
describe('useIDBKeyval', () => {
beforeEach(() => {
console.error = vi.fn()
})
set(KEY3, 'hello')
const data1 = useIDBKeyval(KEY1, { count: 0 })
const data2 = useIDBKeyval(KEY2, ['foo', 'bar'])
const data3 = useIDBKeyval(KEY3, 'world', { shallow: true })
it('get/set', async () => {
expect(data1.value).toEqual({ count: 0 })
expect(data2.value).toEqual(['foo', 'bar'])
expect(data3.value).toEqual('hello')
await promiseTimeout(50)
expect(await get(KEY1)).toEqual(data1.value)
expect(await get(KEY2)).toEqual(data2.value)
expect(await get(KEY3)).toEqual(data3.value)
})
it('update', async () => {
data1.value.count++
data2.value.push('woo')
data3.value = 'world'
await promiseTimeout(50)
expect(await get(KEY1)).toEqual(data1.value)
expect(await get(KEY2)).toEqual(data2.value)
expect(await get(KEY3)).toEqual(data3.value)
})
it('del', async () => {
data1.value = null
data2.value = null
data3.value = null
await promiseTimeout(50)
expect(await get(KEY1)).toBeUndefined()
expect(await get(KEY2)).toBeUndefined()
expect(await get(KEY3)).toBeUndefined()
})
it('catch error on update error', async () => {
data3.value = 'error'
await promiseTimeout(50)
expect(console.error).toHaveBeenCalledTimes(1)
})
it('catch error on init error', async () => {
useIDBKeyval('ERROR_KEY', 'error')
await promiseTimeout(50)
expect(console.error).toHaveBeenCalledTimes(1)
})
})