|
|
@@ -1205,4 +1205,39 @@ describe('api: watch', () => {
|
|
|
expect(countWE).toBe(3)
|
|
|
expect(countW).toBe(2)
|
|
|
})
|
|
|
+
|
|
|
+ // #5151
|
|
|
+ test('OnCleanup also needs to be cleaned,', async () => {
|
|
|
+ const spy1 = vi.fn()
|
|
|
+ const spy2 = vi.fn()
|
|
|
+ const num = ref(0)
|
|
|
+
|
|
|
+ watch(num, (value, oldValue, onCleanup) => {
|
|
|
+ if (value > 1) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ spy1()
|
|
|
+ onCleanup(() => {
|
|
|
+ // OnCleanup also needs to be cleaned
|
|
|
+ spy2()
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ num.value++
|
|
|
+ await nextTick()
|
|
|
+ expect(spy1).toHaveBeenCalledTimes(1)
|
|
|
+ expect(spy2).toHaveBeenCalledTimes(0)
|
|
|
+
|
|
|
+ num.value++
|
|
|
+ await nextTick()
|
|
|
+
|
|
|
+ expect(spy1).toHaveBeenCalledTimes(1)
|
|
|
+ expect(spy2).toHaveBeenCalledTimes(1)
|
|
|
+
|
|
|
+ num.value++
|
|
|
+ await nextTick()
|
|
|
+ // would not be calld when value>1
|
|
|
+ expect(spy1).toHaveBeenCalledTimes(1)
|
|
|
+ expect(spy2).toHaveBeenCalledTimes(1)
|
|
|
+ })
|
|
|
})
|