@@ -167,10 +167,16 @@ describe('beforeLoad skip or exec', () => {
167167 beforeLoad,
168168 } )
169169 await router . preloadRoute ( { to : '/foo' } )
170+ expect (
171+ router . state . cachedMatches . some ( ( d ) => d . status === 'redirected' ) ,
172+ ) . toBe ( false )
170173 await sleep ( 10 )
171174 await router . navigate ( { to : '/foo' } )
172175
173176 expect ( router . state . location . pathname ) . toBe ( '/foo' )
177+ expect (
178+ router . state . cachedMatches . some ( ( d ) => d . status === 'redirected' ) ,
179+ ) . toBe ( false )
174180 expect ( beforeLoad ) . toHaveBeenCalledTimes ( 2 )
175181 } )
176182
@@ -184,9 +190,15 @@ describe('beforeLoad skip or exec', () => {
184190 } )
185191 router . preloadRoute ( { to : '/foo' } )
186192 await Promise . resolve ( )
193+ expect (
194+ router . state . cachedMatches . some ( ( d ) => d . status === 'redirected' ) ,
195+ ) . toBe ( false )
187196 await router . navigate ( { to : '/foo' } )
188197
189198 expect ( router . state . location . pathname ) . toBe ( '/foo' )
199+ expect (
200+ router . state . cachedMatches . some ( ( d ) => d . status === 'redirected' ) ,
201+ ) . toBe ( false )
190202 expect ( beforeLoad ) . toHaveBeenCalledTimes ( 2 )
191203 } )
192204
@@ -362,10 +374,16 @@ describe('loader skip or exec', () => {
362374 loader,
363375 } )
364376 await router . preloadRoute ( { to : '/foo' } )
377+ expect (
378+ router . state . cachedMatches . some ( ( d ) => d . status === 'redirected' ) ,
379+ ) . toBe ( false )
365380 await sleep ( 10 )
366381 await router . navigate ( { to : '/foo' } )
367382
368383 expect ( router . state . location . pathname ) . toBe ( '/foo' )
384+ expect (
385+ router . state . cachedMatches . some ( ( d ) => d . status === 'redirected' ) ,
386+ ) . toBe ( false )
369387 expect ( loader ) . toHaveBeenCalledTimes ( 2 )
370388 } )
371389
@@ -379,12 +397,40 @@ describe('loader skip or exec', () => {
379397 } )
380398 router . preloadRoute ( { to : '/foo' } )
381399 await Promise . resolve ( )
400+ expect (
401+ router . state . cachedMatches . some ( ( d ) => d . status === 'redirected' ) ,
402+ ) . toBe ( false )
382403 await router . navigate ( { to : '/foo' } )
383404
384405 expect ( router . state . location . pathname ) . toBe ( '/bar' )
406+ expect (
407+ router . state . cachedMatches . some ( ( d ) => d . status === 'redirected' ) ,
408+ ) . toBe ( false )
385409 expect ( loader ) . toHaveBeenCalledTimes ( 1 )
386410 } )
387411
412+ test ( 'updateMatch removes redirected matches from cachedMatches' , async ( ) => {
413+ const loader = vi . fn ( )
414+ const router = setup ( { loader } )
415+
416+ await router . preloadRoute ( { to : '/foo' } )
417+ expect ( router . state . cachedMatches ) . toEqual (
418+ expect . arrayContaining ( [ expect . objectContaining ( { id : '/foo/foo' } ) ] ) ,
419+ )
420+
421+ router . updateMatch ( '/foo/foo' , ( prev ) => ( {
422+ ...prev ,
423+ status : 'redirected' ,
424+ } ) )
425+
426+ expect ( router . state . cachedMatches . some ( ( d ) => d . id === '/foo/foo' ) ) . toBe (
427+ false ,
428+ )
429+ expect (
430+ router . state . cachedMatches . some ( ( d ) => d . status === 'redirected' ) ,
431+ ) . toBe ( false )
432+ } )
433+
388434 test ( 'exec if rejected preload (error)' , async ( ) => {
389435 const loader = vi . fn < Loader > ( async ( { preload } ) => {
390436 if ( preload ) throw new Error ( 'error' )
0 commit comments