forked from vueuse/vueuse
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.test.ts
85 lines (52 loc) · 1.86 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
import { useCloned } from '@vueuse/core'
import { expect } from 'vitest'
import { nextTick, ref } from 'vue-demi'
describe('useCloned', () => {
it('works with simple objects', () => {
const data = { test: 'test' }
const { cloned, sync } = useCloned(data)
expect(cloned.value).toEqual(data)
cloned.value = { test: 'failed' }
sync()
expect(cloned.value).toEqual(data)
})
it('works with refs', async () => {
const data = ref({ test: 'test' })
const { cloned } = useCloned(data)
data.value.test = 'success'
await nextTick()
expect(cloned.value).toEqual(data.value)
})
it('works with refs and manual sync', async () => {
const data = ref({ test: 'test' })
const { cloned, sync } = useCloned(data, { manual: true })
data.value.test = 'success'
expect(cloned.value).not.toEqual(data.value)
sync()
expect(cloned.value).toEqual(data.value)
})
it('works with custom clone function', async () => {
const data = ref({ test: 'test' })
const { cloned } = useCloned<Record<string, any>>(data, { cloneFunction: (source, cloned) => ({ ...cloned, ...source, proxyTest: true }) })
cloned.value.check = 'value'
data.value.test = 'partial'
await nextTick()
expect(cloned.value.check).toBe('value')
expect(cloned.value.test).toBe('partial')
expect(cloned.value.proxyTest).toBe(true)
})
it('works with watch options', async () => {
const data = ref({ test: 'test' })
const { cloned } = useCloned(data, { watchOptions: { immediate: false, deep: false } })
await nextTick()
// test immediate: false
expect(cloned.value).toEqual({})
data.value.test = 'not valid'
await nextTick()
// test deep: false
expect(cloned.value).toEqual({})
data.value = { test: 'valid' }
await nextTick()
expect(cloned.value).toEqual(data.value)
})
})