@@ -362,6 +362,54 @@ describe('React hydration', () => {
362
362
queryClient . clear ( )
363
363
} )
364
364
365
+ test ( 'should not hydrate queries if state is not an object' , async ( ) => {
366
+ const queryClient = new QueryClient ( )
367
+
368
+ const hydrateSpy = vi . spyOn ( coreModule , 'hydrate' )
369
+
370
+ function Page ( ) {
371
+ return null
372
+ }
373
+
374
+ render (
375
+ < QueryClientProvider client = { queryClient } >
376
+ < HydrationBoundary state = { 'invalid-state' as any } >
377
+ < Page />
378
+ </ HydrationBoundary >
379
+ </ QueryClientProvider > ,
380
+ )
381
+
382
+ await vi . advanceTimersByTimeAsync ( 0 )
383
+ expect ( hydrateSpy ) . toHaveBeenCalledTimes ( 0 )
384
+
385
+ hydrateSpy . mockRestore ( )
386
+ queryClient . clear ( )
387
+ } )
388
+
389
+ test ( 'should handle state without queries property gracefully' , async ( ) => {
390
+ const queryClient = new QueryClient ( )
391
+
392
+ const hydrateSpy = vi . spyOn ( coreModule , 'hydrate' )
393
+
394
+ function Page ( ) {
395
+ return null
396
+ }
397
+
398
+ render (
399
+ < QueryClientProvider client = { queryClient } >
400
+ < HydrationBoundary state = { { } as any } >
401
+ < Page />
402
+ </ HydrationBoundary >
403
+ </ QueryClientProvider > ,
404
+ )
405
+
406
+ await vi . advanceTimersByTimeAsync ( 0 )
407
+ expect ( hydrateSpy ) . toHaveBeenCalledTimes ( 0 )
408
+
409
+ hydrateSpy . mockRestore ( )
410
+ queryClient . clear ( )
411
+ } )
412
+
365
413
// https://github.com/TanStack/query/issues/8677
366
414
test ( 'should not infinite loop when hydrating promises that resolve to errors' , async ( ) => {
367
415
const originalHydrate = coreModule . hydrate
0 commit comments