File tree 2 files changed +41
-0
lines changed
2 files changed +41
-0
lines changed Original file line number Diff line number Diff line change 5
5
type WatchOptions ,
6
6
type WatchScheduler ,
7
7
computed ,
8
+ onScopeDispose ,
8
9
onWatcherCleanup ,
9
10
ref ,
10
11
watch ,
@@ -277,4 +278,24 @@ describe('watch', () => {
277
278
278
279
expect ( dummy ) . toEqual ( [ 1 , 2 , 3 ] )
279
280
} )
281
+
282
+ // #12681
283
+ test ( 'onScopeDispose inside non-immediate watcher' , ( ) => {
284
+ const cleanupSpy = vi . fn ( )
285
+ const cbSpy = vi . fn ( ( ) => {
286
+ onScopeDispose ( cleanupSpy )
287
+ } )
288
+ const scope = new EffectScope ( )
289
+
290
+ scope . run ( ( ) => {
291
+ const signal = ref ( false )
292
+ watch ( signal , cbSpy )
293
+ signal . value = true
294
+ } )
295
+
296
+ scope . stop ( )
297
+
298
+ expect ( cbSpy ) . toBeCalledTimes ( 1 )
299
+ expect ( cleanupSpy ) . toBeCalledTimes ( 1 )
300
+ } )
280
301
} )
Original file line number Diff line number Diff line change @@ -2010,4 +2010,24 @@ describe('api: watch', () => {
2010
2010
createApp ( App ) . mount ( root )
2011
2011
expect ( onCleanup ) . toBeCalledTimes ( 0 )
2012
2012
} )
2013
+
2014
+ // #12681
2015
+ test ( 'onScopeDispose inside non-immediate watcher that ran' , ( ) => {
2016
+ const cleanupSpy = vi . fn ( )
2017
+ const cbSpy = vi . fn ( ( ) => {
2018
+ onScopeDispose ( cleanupSpy )
2019
+ } )
2020
+ const scope = effectScope ( )
2021
+
2022
+ scope . run ( ( ) => {
2023
+ const signal = ref ( false )
2024
+ watch ( signal , cbSpy )
2025
+ signal . value = true
2026
+ } )
2027
+
2028
+ scope . stop ( )
2029
+
2030
+ expect ( cbSpy ) . toBeCalledTimes ( 1 )
2031
+ expect ( cleanupSpy ) . toBeCalledTimes ( 1 )
2032
+ } )
2013
2033
} )
You can’t perform that action at this time.
0 commit comments