Skip to content

Commit 5a1358e

Browse files
committed
idk
1 parent efed3ff commit 5a1358e

File tree

1 file changed

+35
-19
lines changed

1 file changed

+35
-19
lines changed

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

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
2638
describe('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

Comments
 (0)