@@ -900,58 +900,63 @@ describe('useAsyncData', () => {
900900
901901 // https://github.com/nuxt/nuxt/issues/33777
902902 it ( 'should continue watching params after reactive key changes' , async ( ) => {
903- const id = ref ( '1' )
904- const page = ref ( 0 )
905- const promiseFn = vi . fn ( ( id : string , page : number ) => Promise . resolve ( `id: ${ id } , page: ${ page } ` ) )
906-
907- const params = computed ( ( ) => ( { id : id . value , page : page . value } ) )
908-
909- const { data, error } = await useAsyncData (
910- ( ) => `data-${ id . value } ` ,
911- ( ) => promiseFn ( params . value . id , params . value . page ) ,
912- {
913- watch : [ params ] ,
914- immediate : true ,
915- } ,
916- )
917-
918- // Initial call
919- expect ( data . value ) . toBe ( 'id: 1, page: 0' )
920- expect ( promiseFn ) . toHaveBeenCalledTimes ( 1 )
921- expect ( promiseFn ) . toHaveBeenLastCalledWith ( '1' , 0 )
922-
923- // Change key: id changes from '1' to '2'
924- id . value = '2'
925- await nextTick ( )
926- await flushPromises ( )
927- await new Promise ( resolve => setTimeout ( resolve , 5 ) )
928-
929- expect ( promiseFn ) . toHaveBeenCalledTimes ( 2 )
930- expect ( promiseFn ) . toHaveBeenLastCalledWith ( '2' , 0 )
931- expect ( error . value ) . toBe ( undefined )
932- expect ( data . value ) . toBe ( 'id: 2, page: 0' )
933-
934- // Verify params watcher continues to work after key change (issue #33777)
935- page . value = 1
936- await nextTick ( )
937- await flushPromises ( )
938- await new Promise ( resolve => setTimeout ( resolve , 5 ) )
939-
940- expect ( promiseFn ) . toHaveBeenCalledTimes ( 3 )
941- expect ( promiseFn ) . toHaveBeenLastCalledWith ( '2' , 1 )
942- expect ( error . value ) . toBe ( undefined )
943- expect ( data . value ) . toBe ( 'id: 2, page: 1' )
944-
945- // Another params change to be thorough
946- page . value = 2
947- await nextTick ( )
948- await flushPromises ( )
949- await new Promise ( resolve => setTimeout ( resolve , 5 ) )
950-
951- expect ( promiseFn ) . toHaveBeenCalledTimes ( 4 )
952- expect ( promiseFn ) . toHaveBeenLastCalledWith ( '2' , 2 )
953- expect ( error . value ) . toBe ( undefined )
954- expect ( data . value ) . toBe ( 'id: 2, page: 2' )
903+ vi . useFakeTimers ( )
904+ try {
905+ const id = ref ( '1' )
906+ const page = ref ( 0 )
907+ const promiseFn = vi . fn ( ( id : string , page : number ) => Promise . resolve ( `id: ${ id } , page: ${ page } ` ) )
908+
909+ const params = computed ( ( ) => ( { id : id . value , page : page . value } ) )
910+
911+ const { data, error } = await useAsyncData (
912+ ( ) => `data-${ id . value } ` ,
913+ ( ) => promiseFn ( params . value . id , params . value . page ) ,
914+ {
915+ watch : [ params ] ,
916+ immediate : true ,
917+ } ,
918+ )
919+
920+ // Initial call
921+ expect ( data . value ) . toBe ( 'id: 1, page: 0' )
922+ expect ( promiseFn ) . toHaveBeenCalledTimes ( 1 )
923+ expect ( promiseFn ) . toHaveBeenLastCalledWith ( '1' , 0 )
924+
925+ // Change key: id changes from '1' to '2'
926+ id . value = '2'
927+ await nextTick ( )
928+ await flushPromises ( )
929+ await vi . advanceTimersByTimeAsync ( 5 )
930+
931+ expect ( promiseFn ) . toHaveBeenCalledTimes ( 2 )
932+ expect ( promiseFn ) . toHaveBeenLastCalledWith ( '2' , 0 )
933+ expect ( error . value ) . toBe ( undefined )
934+ expect ( data . value ) . toBe ( 'id: 2, page: 0' )
935+
936+ // Verify params watcher continues to work after key change (issue #33777)
937+ page . value = 1
938+ await nextTick ( )
939+ await flushPromises ( )
940+ await vi . advanceTimersByTimeAsync ( 5 )
941+
942+ expect ( promiseFn ) . toHaveBeenCalledTimes ( 3 )
943+ expect ( promiseFn ) . toHaveBeenLastCalledWith ( '2' , 1 )
944+ expect ( error . value ) . toBe ( undefined )
945+ expect ( data . value ) . toBe ( 'id: 2, page: 1' )
946+
947+ // Another params change to be thorough
948+ page . value = 2
949+ await nextTick ( )
950+ await flushPromises ( )
951+ await vi . advanceTimersByTimeAsync ( 5 )
952+
953+ expect ( promiseFn ) . toHaveBeenCalledTimes ( 4 )
954+ expect ( promiseFn ) . toHaveBeenLastCalledWith ( '2' , 2 )
955+ expect ( error . value ) . toBe ( undefined )
956+ expect ( data . value ) . toBe ( 'id: 2, page: 2' )
957+ } finally {
958+ vi . useRealTimers ( )
959+ }
955960 } )
956961
957962 it ( 'should trigger AbortController on clear' , ( ) => {
0 commit comments