Skip to content

Commit b222b14

Browse files
committed
wip
1 parent b7cf7fc commit b222b14

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

packages/react-query/src/__tests__/useQuery.promise.test.tsx

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,4 +1377,75 @@ describe('useQuery().promise', () => {
13771377
.observers.length,
13781378
).toBe(2)
13791379
})
1380+
1381+
it('should handle enabled state changes with suspense', async () => {
1382+
const key = queryKey()
1383+
const renderStream = createRenderStream({ snapshotDOM: true })
1384+
const queryFn = vi.fn(async () => {
1385+
await sleep(1)
1386+
return 'test'
1387+
})
1388+
1389+
function MyComponent(props: { enabled: boolean }) {
1390+
useTrackRenders()
1391+
const query = useQuery({
1392+
queryKey: key,
1393+
queryFn,
1394+
enabled: props.enabled,
1395+
staleTime: Infinity,
1396+
})
1397+
1398+
const data = React.use(query.promise)
1399+
return <>{data}</>
1400+
}
1401+
1402+
function Loading() {
1403+
useTrackRenders()
1404+
return <>loading..</>
1405+
}
1406+
1407+
function Page() {
1408+
useTrackRenders()
1409+
const enabledState = React.useState(false)
1410+
const enabled = enabledState[0]
1411+
const setEnabled = enabledState[1]
1412+
1413+
return (
1414+
<div>
1415+
<button onClick={() => setEnabled(true)}>enable</button>
1416+
<React.Suspense fallback={<Loading />}>
1417+
<MyComponent enabled={enabled} />
1418+
</React.Suspense>
1419+
</div>
1420+
)
1421+
}
1422+
1423+
const rendered = await renderStream.render(
1424+
<QueryClientProvider client={queryClient}>
1425+
<Page />
1426+
</QueryClientProvider>,
1427+
)
1428+
1429+
{
1430+
const result = await renderStream.takeRender()
1431+
result.withinDOM().getByText('loading..')
1432+
}
1433+
1434+
expect(queryFn).toHaveBeenCalledTimes(0)
1435+
rendered.getByText('enable').click()
1436+
1437+
{
1438+
const result = await renderStream.takeRender()
1439+
result.withinDOM().getByText('loading..')
1440+
}
1441+
1442+
expect(queryFn).toHaveBeenCalledTimes(1)
1443+
1444+
{
1445+
const result = await renderStream.takeRender()
1446+
result.withinDOM().getByText('test')
1447+
}
1448+
1449+
expect(queryFn).toHaveBeenCalledTimes(1)
1450+
})
13801451
})

0 commit comments

Comments
 (0)