@@ -23,6 +23,18 @@ afterAll(() => {
2323  disableActReturn . cleanup ( ) 
2424} ) 
2525
26+ function  createDeferred < T  =  void > ( )  { 
27+   let  resolve : ( value : T )  =>  void 
28+   let  reject : ( error : unknown )  =>  void 
29+   const  promise  =  new  Promise < T > ( ( _resolve ,  _reject )  =>  { 
30+     resolve  =  _resolve 
31+     reject  =  _reject 
32+   } ) 
33+   return  {  promise,  resolve : resolve ! ,  reject : reject !  } 
34+ } 
35+ 
36+ type  Deferred < T  =  void >  =  ReturnType < typeof  createDeferred < T > > 
37+ 
2638describe ( 'useQuery().promise' ,  ( )  =>  { 
2739  const  queryCache  =  new  QueryCache ( ) 
2840  const  queryClient  =  createQueryClient ( { 
@@ -148,7 +160,9 @@ describe('useQuery().promise', () => {
148160  } ) 
149161
150162  it ( 'parallel queries' ,  async  ( )  =>  { 
163+     const  deferred  =  createDeferred ( ) 
151164    const  key  =  queryKey ( ) 
165+ 
152166    const  renderStream  =  createRenderStream ( {  snapshotDOM : true  } ) 
153167    let  callCount  =  0 
154168
@@ -158,7 +172,7 @@ describe('useQuery().promise', () => {
158172        queryKey : key , 
159173        queryFn : async  ( )  =>  { 
160174          callCount ++ 
161-           await  sleep ( 1 ) 
175+           await  deferred . promise 
162176          return  'test' 
163177        } , 
164178        staleTime : 1000 , 
@@ -170,7 +184,7 @@ describe('useQuery().promise', () => {
170184
171185    function  Loading ( )  { 
172186      useTrackRenders ( ) 
173-       return  < > loading..</ > 
187+       return  < span > loading..</ span > 
174188    } 
175189    function  Page ( )  { 
176190      useTrackRenders ( ) 
@@ -181,7 +195,7 @@ describe('useQuery().promise', () => {
181195            < MyComponent  /> 
182196            < MyComponent  /> 
183197          </ React . Suspense > 
184-           < React . Suspense  fallback = { null } > 
198+           < React . Suspense  fallback = { < span > loading 2... </ span > } > 
185199            < MyComponent  /> 
186200            < MyComponent  /> 
187201          </ React . Suspense > 
@@ -198,19 +212,15 @@ describe('useQuery().promise', () => {
198212    { 
199213      const  {  renderedComponents,  withinDOM }  =  await  renderStream . takeRender ( ) 
200214      withinDOM ( ) . getByText ( 'loading..' ) 
215+       withinDOM ( ) . getByText ( 'loading 2...' ) 
201216      expect ( renderedComponents ) . toEqual ( [ Page ,  Loading ] ) 
202217    } 
203218
219+     deferred . resolve ( ) 
220+ 
204221    { 
205-       const  {  renderedComponents ,   withinDOM }  =  await  renderStream . takeRender ( ) 
222+       const  {  withinDOM }  =  await  renderStream . takeRender ( ) 
206223      withinDOM ( ) . getByText ( 'testtesttesttesttest' ) 
207-       expect ( renderedComponents ) . toEqual ( [ 
208-         MyComponent , 
209-         MyComponent , 
210-         MyComponent , 
211-         MyComponent , 
212-         MyComponent , 
213-       ] ) 
214224    } 
215225
216226    expect ( callCount ) . toBe ( 1 ) 
@@ -493,6 +503,7 @@ describe('useQuery().promise', () => {
493503  } ) 
494504
495505  it ( 'should throw error if the promise fails' ,  async  ( )  =>  { 
506+     let  deferred  =  createDeferred ( ) 
496507    const  renderStream  =  createRenderStream ( {  snapshotDOM : true  } ) 
497508    const  consoleMock  =  vi 
498509      . spyOn ( console ,  'error' ) 
@@ -514,12 +525,10 @@ describe('useQuery().promise', () => {
514525      const  query  =  useQuery ( { 
515526        queryKey : key , 
516527        queryFn : async  ( )  =>  { 
517-           await  sleep ( 1 ) 
518-           if  ( ++ queryCount  >  1 )  { 
519-             // second time this query mounts, it should not throw 
520-             return  'data' 
521-           } 
522-           throw  new  Error ( 'Error test' ) 
528+           queryCount ++ 
529+           await  deferred . promise 
530+ 
531+           return  'data' 
523532        } , 
524533        retry : false , 
525534      } ) 
@@ -562,6 +571,9 @@ describe('useQuery().promise', () => {
562571      withinDOM ( ) . getByText ( 'loading..' ) 
563572    } 
564573
574+     deferred . reject ( new  Error ( 'Error test' ) ) 
575+     deferred  =  createDeferred ( ) 
576+ 
565577    { 
566578      const  {  withinDOM }  =  await  renderStream . takeRender ( ) 
567579      withinDOM ( ) . getByText ( 'error boundary' ) 
@@ -576,6 +588,7 @@ describe('useQuery().promise', () => {
576588      withinDOM ( ) . getByText ( 'loading..' ) 
577589    } 
578590
591+     deferred . resolve ( ) 
579592    { 
580593      const  {  withinDOM }  =  await  renderStream . takeRender ( ) 
581594      withinDOM ( ) . getByText ( 'data' ) 
@@ -585,6 +598,7 @@ describe('useQuery().promise', () => {
585598  } ) 
586599
587600  it ( 'should throw error if the promise fails (colocate suspense and promise)' ,  async  ( )  =>  { 
601+     const  deferred  =  createDeferred ( ) 
588602    const  renderStream  =  createRenderStream ( {  snapshotDOM : true  } ) 
589603    const  consoleMock  =  vi 
590604      . spyOn ( console ,  'error' ) 
@@ -596,8 +610,8 @@ describe('useQuery().promise', () => {
596610      const  query  =  useQuery ( { 
597611        queryKey : key , 
598612        queryFn : async  ( )  =>  { 
599-           await  sleep ( 1 ) 
600-           throw   new   Error ( 'Error test' ) 
613+           await  deferred . promise 
614+           return   'data' 
601615        } , 
602616        retry : false , 
603617      } ) 
@@ -627,6 +641,8 @@ describe('useQuery().promise', () => {
627641      withinDOM ( ) . getByText ( 'loading..' ) 
628642    } 
629643
644+     deferred . reject ( new  Error ( 'Error test' ) ) 
645+ 
630646    { 
631647      const  {  withinDOM }  =  await  renderStream . takeRender ( ) 
632648      withinDOM ( ) . getByText ( 'error boundary' ) 
0 commit comments