@@ -14,7 +14,11 @@ import {
1414 provideZonelessChangeDetection ,
1515 signal ,
1616} from '../../src/core' ;
17- import { afterRenderEffect } from '../../src/render3/reactivity/after_render_effect' ;
17+ import {
18+ afterRenderEffect ,
19+ AfterRenderEffectSequence ,
20+ } from '../../src/render3/reactivity/after_render_effect' ;
21+ import { AfterRenderPhase } from '../../src/render3/after_render/api' ;
1822import { TestBed } from '../../testing' ;
1923
2024describe ( 'afterRenderEffect' , ( ) => {
@@ -191,6 +195,37 @@ describe('afterRenderEffect', () => {
191195 expect ( log ) . toEqual ( [ 'cleanup earlyRead' , 'earlyRead: 4' , 'cleanup write' , 'write: true' ] ) ;
192196 } ) ;
193197
198+ it ( 'should disconnect the consummer from the graph when destroyed' , ( ) => {
199+ const log : string [ ] = [ ] ;
200+ const appRef = TestBed . inject ( ApplicationRef ) ;
201+ const counter = signal ( 0 ) ;
202+
203+ const ref = afterRenderEffect (
204+ {
205+ earlyRead : ( ) => counter ( ) % 2 === 0 ,
206+ write : ( isEven ) => isEven ( ) ,
207+ mixedReadWrite : ( isEven ) => isEven ( ) ,
208+ read : ( isEven ) => isEven ( ) ,
209+ } ,
210+ { injector : appRef . injector } ,
211+ ) as AfterRenderEffectSequence ;
212+
213+ appRef . tick ( ) ;
214+
215+ const phaseNodes = ref [ 'nodes' ] ;
216+ expect ( phaseNodes [ AfterRenderPhase . EarlyRead ] ?. consumers ) . toBeDefined ( ) ;
217+ expect ( phaseNodes [ AfterRenderPhase . Write ] ?. consumers ) . toBeDefined ( ) ;
218+ expect ( phaseNodes [ AfterRenderPhase . MixedReadWrite ] ?. consumers ) . toBeDefined ( ) ;
219+ expect ( phaseNodes [ AfterRenderPhase . Read ] ?. producers ) . toBeDefined ( ) ;
220+
221+ ref . destroy ( ) ;
222+
223+ expect ( phaseNodes [ AfterRenderPhase . EarlyRead ] ?. consumers ) . toBeUndefined ( ) ;
224+ expect ( phaseNodes [ AfterRenderPhase . Write ] ?. consumers ) . toBeUndefined ( ) ;
225+ expect ( phaseNodes [ AfterRenderPhase . MixedReadWrite ] ?. consumers ) . toBeUndefined ( ) ;
226+ expect ( phaseNodes [ AfterRenderPhase . Read ] ?. producers ) . toBeUndefined ( ) ;
227+ } ) ;
228+
194229 it ( 'should run cleanup functions when destroyed' , ( ) => {
195230 const log : string [ ] = [ ] ;
196231 const appRef = TestBed . inject ( ApplicationRef ) ;
0 commit comments