Repository navigation
Expand file tree
/
Copy pathQueryClientProvider.test.tsx
More file actions
130 lines (106 loc) · 3.02 KB
/
Copy pathQueryClientProvider.test.tsx
File metadata and controls
130 lines (106 loc) · 3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import React from 'react'
import { render, waitFor } from '@testing-library/react'
import { sleep, queryKey } from './utils'
import { QueryClient, QueryClientProvider, QueryCache, useQuery } from '../..'
describe('QueryClientProvider', () => {
test('sets a specific cache for all queries to use', async () => {
const key = queryKey()
const queryCache = new QueryCache()
const queryClient = new QueryClient({ queryCache })
function Page() {
const { data } = useQuery(key, async () => {
await sleep(10)
return 'test'
})
return (
<div>
<h1>{data}</h1>
</div>
)
}
const rendered = render(
<QueryClientProvider client={queryClient}>
<Page />
</QueryClientProvider>
)
await waitFor(() => rendered.getByText('test'))
expect(queryCache.find(key)).toBeDefined()
})
test('allows multiple caches to be partitioned', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryCache1 = new QueryCache()
const queryCache2 = new QueryCache()
const queryClient1 = new QueryClient({ queryCache: queryCache1 })
const queryClient2 = new QueryClient({ queryCache: queryCache2 })
function Page1() {
const { data } = useQuery(key1, async () => {
await sleep(10)
return 'test1'
})
return (
<div>
<h1>{data}</h1>
</div>
)
}
function Page2() {
const { data } = useQuery(key2, async () => {
await sleep(10)
return 'test2'
})
return (
<div>
<h1>{data}</h1>
</div>
)
}
const rendered = render(
<>
<QueryClientProvider client={queryClient1}>
<Page1 />
</QueryClientProvider>
<QueryClientProvider client={queryClient2}>
<Page2 />
</QueryClientProvider>
</>
)
await waitFor(() => rendered.getByText('test1'))
await waitFor(() => rendered.getByText('test2'))
expect(queryCache1.find(key1)).toBeDefined()
expect(queryCache1.find(key2)).not.toBeDefined()
expect(queryCache2.find(key1)).not.toBeDefined()
expect(queryCache2.find(key2)).toBeDefined()
})
test("uses defaultOptions for queries when they don't provide their own config", async () => {
const key = queryKey()
const queryCache = new QueryCache()
const queryClient = new QueryClient({
queryCache,
defaultOptions: {
queries: {
cacheTime: Infinity,
},
},
})
function Page() {
const { data } = useQuery(key, async () => {
await sleep(10)
return 'test'
})
return (
<div>
<h1>{data}</h1>
</div>
)
}
const rendered = render(
<QueryClientProvider client={queryClient}>
<Page />
</QueryClientProvider>
)
await waitFor(() => rendered.getByText('test'))
expect(queryCache.find(key)).toBeDefined()
expect(queryCache.find(key)?.options.cacheTime).toBe(Infinity)
})
})