@@ -577,4 +577,74 @@ describe("useQuery's in Suspense mode", () => {
577577 expect ( queryFn ) . toHaveBeenCalledTimes ( 1 )
578578 await waitFor ( ( ) => rendered . getByLabelText ( 'fire' ) )
579579 } )
580+
581+ it ( 'should error catched in error boundary without infinite loop' , async ( ) => {
582+ const key = queryKey ( )
583+
584+ const consoleMock = mockConsoleError ( )
585+
586+ let succeed = true
587+
588+ function Page ( ) {
589+ const [ nonce ] = React . useState ( 0 )
590+ const queryKeys = `${ key } -${ succeed } `
591+ const result = useQuery (
592+ queryKeys ,
593+ async ( ) => {
594+ await sleep ( 10 )
595+ if ( ! succeed ) {
596+ throw new Error ( 'Suspense Error Bingo' )
597+ } else {
598+ return nonce
599+ }
600+ } ,
601+ {
602+ retry : false ,
603+ suspense : true ,
604+ }
605+ )
606+ return (
607+ < div >
608+ < span > rendered</ span > < span > { result . data } </ span >
609+ < button
610+ aria-label = "fail"
611+ onClick = { async ( ) => {
612+ await queryClient . resetQueries ( )
613+ } }
614+ >
615+ fail
616+ </ button >
617+ </ div >
618+ )
619+ }
620+
621+ function App ( ) {
622+ const { reset } = useQueryErrorResetBoundary ( )
623+ return (
624+ < ErrorBoundary
625+ onReset = { reset }
626+ fallbackRender = { ( ) => < div > error boundary</ div > }
627+ >
628+ < React . Suspense fallback = "Loading..." >
629+ < Page />
630+ </ React . Suspense >
631+ </ ErrorBoundary >
632+ )
633+ }
634+
635+ const rendered = renderWithClient ( queryClient , < App /> )
636+
637+ // render suspense fallback (Loading...)
638+ await waitFor ( ( ) => rendered . getByText ( 'Loading...' ) )
639+ // resolve promise -> render Page (rendered)
640+ await waitFor ( ( ) => rendered . getByText ( 'rendered' ) )
641+
642+ // change query key
643+ succeed = false
644+ // reset query -> and throw error
645+ fireEvent . click ( rendered . getByLabelText ( 'fail' ) )
646+ // render error boundary fallback (error boundary)
647+ await waitFor ( ( ) => rendered . getByText ( 'error boundary' ) )
648+ consoleMock . mockRestore ( )
649+ } )
580650} )
0 commit comments