test: fix deep watch for Map/Set
This commit is contained in:
parent
62e07a1b7e
commit
2b6ca9a7b6
@ -261,34 +261,45 @@ describe('api: watch', () => {
|
|||||||
count: ref(0)
|
count: ref(0)
|
||||||
},
|
},
|
||||||
array: [1, 2, 3],
|
array: [1, 2, 3],
|
||||||
map: new Map([['a', 1], ['b', 2]])
|
map: new Map([['a', 1], ['b', 2]]),
|
||||||
|
set: new Set([1, 2, 3])
|
||||||
})
|
})
|
||||||
|
|
||||||
let dummy
|
let dummy
|
||||||
watch(
|
watch(
|
||||||
() => state,
|
() => state,
|
||||||
state => {
|
state => {
|
||||||
dummy = [state.nested.count, state.array[0], state.map.get('a')]
|
dummy = [
|
||||||
|
state.nested.count,
|
||||||
|
state.array[0],
|
||||||
|
state.map.get('a'),
|
||||||
|
state.set.has(1)
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{ deep: true }
|
{ deep: true }
|
||||||
)
|
)
|
||||||
|
|
||||||
await nextTick()
|
await nextTick()
|
||||||
expect(dummy).toEqual([0, 1, 1])
|
expect(dummy).toEqual([0, 1, 1, true])
|
||||||
|
|
||||||
state.nested.count++
|
state.nested.count++
|
||||||
await nextTick()
|
await nextTick()
|
||||||
expect(dummy).toEqual([1, 1, 1])
|
expect(dummy).toEqual([1, 1, 1, true])
|
||||||
|
|
||||||
// nested array mutation
|
// nested array mutation
|
||||||
state.array[0] = 2
|
state.array[0] = 2
|
||||||
await nextTick()
|
await nextTick()
|
||||||
expect(dummy).toEqual([1, 2, 1])
|
expect(dummy).toEqual([1, 2, 1, true])
|
||||||
|
|
||||||
// nested map mutation
|
// nested map mutation
|
||||||
state.map.set('a', 2)
|
state.map.set('a', 2)
|
||||||
await nextTick()
|
await nextTick()
|
||||||
expect(dummy).toEqual([1, 2, 2])
|
expect(dummy).toEqual([1, 2, 2, true])
|
||||||
|
|
||||||
|
// nested set mutation
|
||||||
|
state.set.delete(1)
|
||||||
|
await nextTick()
|
||||||
|
expect(dummy).toEqual([1, 2, 2, false])
|
||||||
})
|
})
|
||||||
|
|
||||||
it('lazy', async () => {
|
it('lazy', async () => {
|
||||||
|
@ -164,7 +164,12 @@ function traverse(value: any, seen: Set<any> = new Set()) {
|
|||||||
for (let i = 0; i < value.length; i++) {
|
for (let i = 0; i < value.length; i++) {
|
||||||
traverse(value[i], seen)
|
traverse(value[i], seen)
|
||||||
}
|
}
|
||||||
} else if (value instanceof Map || value instanceof Set) {
|
} else if (value instanceof Map) {
|
||||||
|
;(value as any).forEach((v: any, key: any) => {
|
||||||
|
// to register mutation dep for existing keys
|
||||||
|
traverse(value.get(key), seen)
|
||||||
|
})
|
||||||
|
} else if (value instanceof Set) {
|
||||||
;(value as any).forEach((v: any) => {
|
;(value as any).forEach((v: any) => {
|
||||||
traverse(v, seen)
|
traverse(v, seen)
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user