@@ -454,14 +454,10 @@ describe('reactivity/computed', () => {
454454 expect ( fnSpy ) . toBeCalledTimes ( 2 )
455455 } )
456456
457- it ( '...' , ( ) => {
458- const fnSpy = vi . fn ( )
457+ it ( 'should chained recurse effects clear dirty after trigger' , ( ) => {
459458 const v = ref ( 1 )
460459 const c1 = computed ( ( ) => v . value )
461- const c2 = computed ( ( ) => {
462- fnSpy ( )
463- return c1 . value
464- } )
460+ const c2 = computed ( ( ) => c1 . value )
465461
466462 c1 . effect . allowRecurse = true
467463 c2 . effect . allowRecurse = true
@@ -471,6 +467,40 @@ describe('reactivity/computed', () => {
471467 expect ( c2 . effect . _dirtyLevel ) . toBe ( DirtyLevels . NotDirty )
472468 } )
473469
470+ it ( 'should chained computeds dirtyLevel update with first computed effect' , ( ) => {
471+ const v = ref ( 0 )
472+ const c1 = computed ( ( ) => {
473+ if ( v . value === 0 ) {
474+ v . value = 1
475+ }
476+ return v . value
477+ } )
478+ const c2 = computed ( ( ) => c1 . value )
479+ const c3 = computed ( ( ) => c2 . value )
480+
481+ c3 . value
482+
483+ expect ( c1 . effect . _dirtyLevel ) . toBe ( DirtyLevels . Dirty )
484+ expect ( c2 . effect . _dirtyLevel ) . toBe ( DirtyLevels . MaybeDirty )
485+ expect ( c3 . effect . _dirtyLevel ) . toBe ( DirtyLevels . MaybeDirty )
486+
487+ v . value = 2
488+
489+ expect ( c2 . value ) . toBe ( 2 )
490+ } )
491+
492+ it ( 'should work when chained(ref+computed)' , ( ) => {
493+ const value = ref ( 0 )
494+ const consumer = computed ( ( ) => {
495+ value . value ++
496+ return 'foo'
497+ } )
498+ const provider = computed ( ( ) => value . value + consumer . value )
499+ expect ( provider . value ) . toBe ( '0foo' )
500+ expect ( provider . effect . _dirtyLevel ) . toBe ( DirtyLevels . Dirty )
501+ expect ( provider . value ) . toBe ( '1foo' )
502+ } )
503+
474504 it ( 'should be not dirty after deps mutate (mutate deps in computed)' , async ( ) => {
475505 const state = reactive < any > ( { } )
476506 const consumer = computed ( ( ) => {
0 commit comments