File tree Expand file tree Collapse file tree 2 files changed +79
-0
lines changed
Expand file tree Collapse file tree 2 files changed +79
-0
lines changed Original file line number Diff line number Diff line change 55 type WatchOptions ,
66 type WatchScheduler ,
77 computed ,
8+ onScopeDispose ,
89 onWatcherCleanup ,
910 ref ,
1011 watch ,
@@ -277,4 +278,43 @@ describe('watch', () => {
277278
278279 expect ( dummy ) . toEqual ( [ 1 , 2 , 3 ] )
279280 } )
281+
282+ // #12681
283+ test ( 'onScopeDispose inside non-immediate watcher that ran' , ( ) => {
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+ } )
301+
302+ // #12681
303+ test ( 'onScopeDispose inside non-immediate watcher that did not run the callback' , ( ) => {
304+ const cleanupSpy = vi . fn ( )
305+ const cbSpy = vi . fn ( ( ) => {
306+ onScopeDispose ( cleanupSpy )
307+ } )
308+ const scope = new EffectScope ( )
309+
310+ scope . run ( ( ) => {
311+ const signal = ref ( false )
312+ watch ( signal , cbSpy )
313+ } )
314+
315+ scope . stop ( )
316+
317+ expect ( cbSpy ) . toBeCalledTimes ( 1 )
318+ expect ( cleanupSpy ) . toBeCalledTimes ( 1 )
319+ } )
280320} )
Original file line number Diff line number Diff line change @@ -2010,4 +2010,43 @@ describe('api: watch', () => {
20102010 createApp ( App ) . mount ( root )
20112011 expect ( onCleanup ) . toBeCalledTimes ( 0 )
20122012 } )
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+ } )
2033+
2034+ // #12681
2035+ test ( 'onScopeDispose inside non-immediate watcher that did not run the callback' , ( ) => {
2036+ const cleanupSpy = vi . fn ( )
2037+ const cbSpy = vi . fn ( ( ) => {
2038+ onScopeDispose ( cleanupSpy )
2039+ } )
2040+ const scope = effectScope ( )
2041+
2042+ scope . run ( ( ) => {
2043+ const signal = ref ( false )
2044+ watch ( signal , cbSpy )
2045+ } )
2046+
2047+ scope . stop ( )
2048+
2049+ expect ( cbSpy ) . toBeCalledTimes ( 1 )
2050+ expect ( cleanupSpy ) . toBeCalledTimes ( 1 )
2051+ } )
20132052} )
You can’t perform that action at this time.
0 commit comments