1- import { screen } from "@testing-library/react" ;
2- import {
3- createRenderStream ,
4- disableActEnvironment ,
5- useTrackRenders ,
6- } from "@testing-library/react-render-stream" ;
7- import { userEvent } from "@testing-library/user-event" ;
8- import React , { Suspense } from "react" ;
1+ import { disableActEnvironment } from "@testing-library/react-render-stream" ;
92import { delay , of } from "rxjs" ;
103
114import type { OperationVariables } from "@apollo/client" ;
@@ -21,8 +14,7 @@ import {
2114 Defer20220824Handler ,
2215 GraphQL17Alpha9Handler ,
2316} from "@apollo/client/incremental" ;
24- import type { QueryRef } from "@apollo/client/react" ;
25- import { useLoadableQuery , useReadQuery } from "@apollo/client/react" ;
17+ import { useLoadableQuery } from "@apollo/client/react" ;
2618import {
2719 createClientWrapper ,
2820 dateScalar ,
@@ -51,13 +43,6 @@ test("serializes scalar variables used in field arguments", async () => {
5143 } ) ,
5244 } ) ;
5345
54- const renderStream = createRenderStream ( {
55- initialSnapshot : {
56- result : null as useReadQuery . Result < any > | null ,
57- } ,
58- skipNonTrackingRenders : true ,
59- } ) ;
60-
6146 const query = gql `
6247 query Event($date: Date!) {
6348 event(date: $date) {
@@ -66,53 +51,33 @@ test("serializes scalar variables used in field arguments", async () => {
6651 }
6752 ` ;
6853
69- function ReadQuery ( { queryRef } : { queryRef : QueryRef } ) {
70- useTrackRenders ( { name : "useReadQuery" } ) ;
71- renderStream . mergeSnapshot ( { result : useReadQuery ( queryRef ) } ) ;
72-
73- return null ;
74- }
54+ using _disabledAct = disableActEnvironment ( ) ;
55+ const { takeRender, loadQuery } = await renderUseLoadableQueryHook (
56+ ( ) => useLoadableQuery ( query ) ,
57+ { wrapper : createClientWrapper ( client ) }
58+ ) ;
7559
76- function Fallback ( ) {
77- useTrackRenders ( { name : "<Suspense />" } ) ;
78- return null ;
79- }
60+ {
61+ const { renderedComponents } = await takeRender ( ) ;
8062
81- function App ( ) {
82- useTrackRenders ( { name : "useLoadableQuery" } ) ;
83- const [ loadQuery , queryRef ] = useLoadableQuery ( query ) ;
84-
85- return (
86- < >
87- < button onClick = { ( ) => loadQuery ( { date : new Date ( 2026 , 0 , 1 ) } ) } >
88- Load query
89- </ button >
90- < Suspense fallback = { < Fallback /> } >
91- { queryRef && < ReadQuery queryRef = { queryRef } /> }
92- </ Suspense >
93- </ >
94- ) ;
63+ expect ( renderedComponents ) . toStrictEqual ( [ "useLoadableQuery" ] ) ;
9564 }
9665
97- using _disabledAct = disableActEnvironment ( ) ;
98- const user = userEvent . setup ( ) ;
99- await renderStream . render ( < App /> , {
100- wrapper : createClientWrapper ( client ) ,
101- } ) ;
66+ loadQuery ( { date : new Date ( 2026 , 0 , 1 ) } ) ;
10267
103- await expect ( renderStream . takeRender ( ) ) . resolves . toMatchObject ( {
104- renderedComponents : [ "useLoadableQuery" ] ,
105- } ) ;
106-
107- await user . click ( screen . getByText ( "Load query" ) ) ;
68+ {
69+ const { renderedComponents } = await takeRender ( ) ;
10870
109- await expect ( renderStream . takeRender ( ) ) . resolves . toMatchObject ( {
110- renderedComponents : [ "useLoadableQuery" , "<Suspense />" ] ,
111- } ) ;
71+ expect ( renderedComponents ) . toStrictEqual ( [
72+ "useLoadableQuery" ,
73+ "<Suspense />" ,
74+ ] ) ;
75+ }
11276
11377 {
114- const { snapshot, renderedComponents } = await renderStream . takeRender ( ) ;
78+ const { snapshot, renderedComponents } = await takeRender ( ) ;
11579
80+ invariant ( "result" in snapshot ) ;
11681 expect ( renderedComponents ) . toStrictEqual ( [ "useReadQuery" ] ) ;
11782 expect ( snapshot . result ) . toStrictEqualTyped ( {
11883 data : {
@@ -127,7 +92,7 @@ test("serializes scalar variables used in field arguments", async () => {
12792 } ) ;
12893 }
12994
130- await expect ( renderStream ) . not . toRerender ( ) ;
95+ await expect ( takeRender ) . not . toRerender ( ) ;
13196 expect ( requestVariables ) . toStrictEqualTyped ( { date : "2026-01-01" } ) ;
13297} ) ;
13398
@@ -147,13 +112,6 @@ test("serializes scalar variables used in directive arguments", async () => {
147112 } ) ,
148113 } ) ;
149114
150- const renderStream = createRenderStream ( {
151- initialSnapshot : {
152- result : null as useReadQuery . Result < any > | null ,
153- } ,
154- skipNonTrackingRenders : true ,
155- } ) ;
156-
157115 const query = gql `
158116 query Event($date: Date!) {
159117 event @on(date: $date) {
@@ -162,53 +120,33 @@ test("serializes scalar variables used in directive arguments", async () => {
162120 }
163121 ` ;
164122
165- function ReadQuery ( { queryRef } : { queryRef : QueryRef } ) {
166- useTrackRenders ( { name : "useReadQuery" } ) ;
167- renderStream . mergeSnapshot ( { result : useReadQuery ( queryRef ) } ) ;
168-
169- return null ;
170- }
123+ using _disabledAct = disableActEnvironment ( ) ;
124+ const { takeRender, loadQuery } = await renderUseLoadableQueryHook (
125+ ( ) => useLoadableQuery ( query ) ,
126+ { wrapper : createClientWrapper ( client ) }
127+ ) ;
171128
172- function Fallback ( ) {
173- useTrackRenders ( { name : "<Suspense />" } ) ;
174- return null ;
175- }
129+ {
130+ const { renderedComponents } = await takeRender ( ) ;
176131
177- function App ( ) {
178- useTrackRenders ( { name : "useLoadableQuery" } ) ;
179- const [ loadQuery , queryRef ] = useLoadableQuery ( query ) ;
180-
181- return (
182- < >
183- < button onClick = { ( ) => loadQuery ( { date : new Date ( 2026 , 0 , 1 ) } ) } >
184- Load query
185- </ button >
186- < Suspense fallback = { < Fallback /> } >
187- { queryRef && < ReadQuery queryRef = { queryRef } /> }
188- </ Suspense >
189- </ >
190- ) ;
132+ expect ( renderedComponents ) . toStrictEqual ( [ "useLoadableQuery" ] ) ;
191133 }
192134
193- using _disabledAct = disableActEnvironment ( ) ;
194- const user = userEvent . setup ( ) ;
195- await renderStream . render ( < App /> , {
196- wrapper : createClientWrapper ( client ) ,
197- } ) ;
198-
199- await expect ( renderStream . takeRender ( ) ) . resolves . toMatchObject ( {
200- renderedComponents : [ "useLoadableQuery" ] ,
201- } ) ;
135+ loadQuery ( { date : new Date ( 2026 , 0 , 1 ) } ) ;
202136
203- await user . click ( screen . getByText ( "Load query" ) ) ;
137+ {
138+ const { renderedComponents } = await takeRender ( ) ;
204139
205- await expect ( renderStream . takeRender ( ) ) . resolves . toMatchObject ( {
206- renderedComponents : [ "useLoadableQuery" , "<Suspense />" ] ,
207- } ) ;
140+ expect ( renderedComponents ) . toStrictEqual ( [
141+ "useLoadableQuery" ,
142+ "<Suspense />" ,
143+ ] ) ;
144+ }
208145
209146 {
210- const { snapshot, renderedComponents } = await renderStream . takeRender ( ) ;
147+ const { snapshot, renderedComponents } = await takeRender ( ) ;
211148
149+ invariant ( "result" in snapshot ) ;
212150 expect ( renderedComponents ) . toStrictEqual ( [ "useReadQuery" ] ) ;
213151 expect ( snapshot . result ) . toStrictEqualTyped ( {
214152 data : {
@@ -223,7 +161,7 @@ test("serializes scalar variables used in directive arguments", async () => {
223161 } ) ;
224162 }
225163
226- await expect ( renderStream ) . not . toRerender ( ) ;
164+ await expect ( takeRender ) . not . toRerender ( ) ;
227165 expect ( requestVariables ) . toStrictEqualTyped ( { date : "2026-01-01" } ) ;
228166} ) ;
229167
@@ -250,13 +188,6 @@ test("serializes scalar fields in input object variables", async () => {
250188 } ) ,
251189 } ) ;
252190
253- const renderStream = createRenderStream ( {
254- initialSnapshot : {
255- result : null as useReadQuery . Result < any > | null ,
256- } ,
257- skipNonTrackingRenders : true ,
258- } ) ;
259-
260191 const query = gql `
261192 query Event($filter: EventFilter!) {
262193 event(filter: $filter) {
@@ -265,55 +196,33 @@ test("serializes scalar fields in input object variables", async () => {
265196 }
266197 ` ;
267198
268- function ReadQuery ( { queryRef } : { queryRef : QueryRef } ) {
269- useTrackRenders ( { name : "useReadQuery" } ) ;
270- renderStream . mergeSnapshot ( { result : useReadQuery ( queryRef ) } ) ;
271-
272- return null ;
273- }
199+ using _disabledAct = disableActEnvironment ( ) ;
200+ const { takeRender, loadQuery } = await renderUseLoadableQueryHook (
201+ ( ) => useLoadableQuery ( query ) ,
202+ { wrapper : createClientWrapper ( client ) }
203+ ) ;
274204
275- function Fallback ( ) {
276- useTrackRenders ( { name : "<Suspense />" } ) ;
277- return null ;
278- }
205+ {
206+ const { renderedComponents } = await takeRender ( ) ;
279207
280- function App ( ) {
281- useTrackRenders ( { name : "useLoadableQuery" } ) ;
282- const [ loadQuery , queryRef ] = useLoadableQuery ( query ) ;
283-
284- return (
285- < >
286- < button
287- onClick = { ( ) => loadQuery ( { filter : { date : new Date ( 2026 , 0 , 1 ) } } ) }
288- >
289- Load query
290- </ button >
291- < Suspense fallback = { < Fallback /> } >
292- { queryRef && < ReadQuery queryRef = { queryRef } /> }
293- </ Suspense >
294- </ >
295- ) ;
208+ expect ( renderedComponents ) . toStrictEqual ( [ "useLoadableQuery" ] ) ;
296209 }
297210
298- using _disabledAct = disableActEnvironment ( ) ;
299- const user = userEvent . setup ( ) ;
300- await renderStream . render ( < App /> , {
301- wrapper : createClientWrapper ( client ) ,
302- } ) ;
303-
304- await expect ( renderStream . takeRender ( ) ) . resolves . toMatchObject ( {
305- renderedComponents : [ "useLoadableQuery" ] ,
306- } ) ;
211+ loadQuery ( { filter : { date : new Date ( 2026 , 0 , 1 ) } } ) ;
307212
308- await user . click ( screen . getByText ( "Load query" ) ) ;
213+ {
214+ const { renderedComponents } = await takeRender ( ) ;
309215
310- await expect ( renderStream . takeRender ( ) ) . resolves . toMatchObject ( {
311- renderedComponents : [ "useLoadableQuery" , "<Suspense />" ] ,
312- } ) ;
216+ expect ( renderedComponents ) . toStrictEqual ( [
217+ "useLoadableQuery" ,
218+ "<Suspense />" ,
219+ ] ) ;
220+ }
313221
314222 {
315- const { snapshot, renderedComponents } = await renderStream . takeRender ( ) ;
223+ const { snapshot, renderedComponents } = await takeRender ( ) ;
316224
225+ invariant ( "result" in snapshot ) ;
317226 expect ( renderedComponents ) . toStrictEqual ( [ "useReadQuery" ] ) ;
318227 expect ( snapshot . result ) . toStrictEqualTyped ( {
319228 data : {
@@ -328,7 +237,7 @@ test("serializes scalar fields in input object variables", async () => {
328237 } ) ;
329238 }
330239
331- await expect ( renderStream ) . not . toRerender ( ) ;
240+ await expect ( takeRender ) . not . toRerender ( ) ;
332241 expect ( requestVariables ) . toStrictEqualTyped ( {
333242 filter : { date : "2026-01-01" } ,
334243 } ) ;
0 commit comments