Skip to content

Commit 01c5b29

Browse files
authored
test: prevent queries from interfering with each other (TanStack#821)
1 parent 7158e3d commit 01c5b29

13 files changed

+384
-272
lines changed

src/core/tests/queryCache.test.tsx

Lines changed: 124 additions & 83 deletions
Large diffs are not rendered by default.

src/core/tests/utils.test.tsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
import { setConsole, queryCache, queryCaches } from '../'
1+
import { setConsole, queryCache } from '../'
22
import { deepEqual, shallowEqual } from '../utils'
3+
import { queryKey } from '../../react/tests/utils'
34

45
describe('core/utils', () => {
5-
afterEach(() => {
6-
queryCaches.forEach(cache => cache.clear({ notify: false }))
7-
})
8-
96
it('setConsole should override Console object', async () => {
7+
const key = queryKey()
8+
109
const mockConsole = {
1110
error: jest.fn(),
1211
log: jest.fn(),
@@ -16,7 +15,7 @@ describe('core/utils', () => {
1615
setConsole(mockConsole)
1716

1817
await queryCache.prefetchQuery(
19-
'key',
18+
key,
2019
async () => {
2120
throw new Error('Test')
2221
},

src/core/tests/utils.tsx

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/react/tests/ReactQueryCacheProvider.test.tsx

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,16 @@ import {
66
queryCache,
77
useQuery,
88
useQueryCache,
9-
queryCaches,
109
} from '../index'
11-
import { sleep } from './utils'
10+
import { sleep, queryKey } from './utils'
1211
import { QueryCache } from '../../core/queryCache'
1312

1413
describe('ReactQueryCacheProvider', () => {
15-
afterEach(() => {
16-
queryCaches.forEach(cache => cache.clear({ notify: false }))
17-
})
18-
1914
test('when not used, falls back to global cache', async () => {
15+
const key = queryKey()
16+
2017
function Page() {
21-
const { data } = useQuery('test', async () => {
18+
const { data } = useQuery(key, async () => {
2219
await sleep(10)
2320
return 'test'
2421
})
@@ -34,14 +31,16 @@ describe('ReactQueryCacheProvider', () => {
3431

3532
await waitFor(() => rendered.getByText('test'))
3633

37-
expect(queryCache.getQuery('test')).toBeDefined()
34+
expect(queryCache.getQuery(key)).toBeDefined()
3835
})
3936

4037
test('sets a specific cache for all queries to use', async () => {
38+
const key = queryKey()
39+
4140
const cache = makeQueryCache()
4241

4342
function Page() {
44-
const { data } = useQuery('test', async () => {
43+
const { data } = useQuery(key, async () => {
4544
await sleep(10)
4645
return 'test'
4746
})
@@ -61,14 +60,15 @@ describe('ReactQueryCacheProvider', () => {
6160

6261
await waitFor(() => rendered.getByText('test'))
6362

64-
expect(queryCache.getQuery('test')).not.toBeDefined()
65-
expect(cache.getQuery('test')).toBeDefined()
66-
cache.clear({ notify: false })
63+
expect(queryCache.getQuery(key)).not.toBeDefined()
64+
expect(cache.getQuery(key)).toBeDefined()
6765
})
6866

6967
test('implicitly creates a new cache for all queries to use', async () => {
68+
const key = queryKey()
69+
7070
function Page() {
71-
const { data } = useQuery('test', async () => {
71+
const { data } = useQuery(key, async () => {
7272
await sleep(10)
7373
return 'test'
7474
})
@@ -88,15 +88,18 @@ describe('ReactQueryCacheProvider', () => {
8888

8989
await waitFor(() => rendered.getByText('test'))
9090

91-
expect(queryCache.getQuery('test')).not.toBeDefined()
91+
expect(queryCache.getQuery(key)).not.toBeDefined()
9292
})
9393

9494
test('allows multiple caches to be partitioned', async () => {
95+
const key1 = queryKey()
96+
const key2 = queryKey()
97+
9598
const cache1 = makeQueryCache()
9699
const cache2 = makeQueryCache()
97100

98101
function Page1() {
99-
const { data } = useQuery('test1', async () => {
102+
const { data } = useQuery(key1, async () => {
100103
await sleep(10)
101104
return 'test1'
102105
})
@@ -108,7 +111,7 @@ describe('ReactQueryCacheProvider', () => {
108111
)
109112
}
110113
function Page2() {
111-
const { data } = useQuery('test2', async () => {
114+
const { data } = useQuery(key2, async () => {
112115
await sleep(10)
113116
return 'test2'
114117
})
@@ -134,16 +137,18 @@ describe('ReactQueryCacheProvider', () => {
134137
await waitFor(() => rendered.getByText('test1'))
135138
await waitFor(() => rendered.getByText('test2'))
136139

137-
expect(cache1.getQuery('test1')).toBeDefined()
138-
expect(cache1.getQuery('test2')).not.toBeDefined()
139-
expect(cache2.getQuery('test1')).not.toBeDefined()
140-
expect(cache2.getQuery('test2')).toBeDefined()
140+
expect(cache1.getQuery(key1)).toBeDefined()
141+
expect(cache1.getQuery(key2)).not.toBeDefined()
142+
expect(cache2.getQuery(key1)).not.toBeDefined()
143+
expect(cache2.getQuery(key2)).toBeDefined()
141144

142145
cache1.clear({ notify: false })
143146
cache2.clear({ notify: false })
144147
})
145148

146149
test('when cache changes, previous cache is cleaned', () => {
150+
const key = queryKey()
151+
147152
const caches: QueryCache[] = []
148153
const customCache = makeQueryCache()
149154

@@ -153,7 +158,7 @@ describe('ReactQueryCacheProvider', () => {
153158
caches.push(queryCache)
154159
}, [queryCache])
155160

156-
const { data } = useQuery('test', async () => {
161+
const { data } = useQuery(key, async () => {
157162
await sleep(10)
158163
return 'test'
159164
})
@@ -185,7 +190,9 @@ describe('ReactQueryCacheProvider', () => {
185190
customCache.clear({ notify: false })
186191
})
187192

188-
test('uses defaultConfig for queries when they don\'t provide their own config', async () => {
193+
test("uses defaultConfig for queries when they don't provide their own config", async () => {
194+
const key = queryKey()
195+
189196
const cache = makeQueryCache({
190197
defaultConfig: {
191198
queries: {
@@ -195,7 +202,7 @@ describe('ReactQueryCacheProvider', () => {
195202
})
196203

197204
function Page() {
198-
const { data } = useQuery('test', async () => {
205+
const { data } = useQuery(key, async () => {
199206
await sleep(10)
200207
return 'test'
201208
})
@@ -215,8 +222,8 @@ describe('ReactQueryCacheProvider', () => {
215222

216223
await waitFor(() => rendered.getByText('test'))
217224

218-
expect(cache.getQuery('test')).toBeDefined()
219-
expect(cache.getQuery('test')?.config.staleTime).toBe(Infinity)
225+
expect(cache.getQuery(key)).toBeDefined()
226+
expect(cache.getQuery(key)?.config.staleTime).toBe(Infinity)
220227
cache.clear({ notify: false })
221228
})
222229
})

src/react/tests/ReactQueryConfigProvider.test.tsx

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,14 @@
11
import React, { useState } from 'react'
22
import { act, fireEvent, render, waitFor } from '@testing-library/react'
3-
import {
4-
ReactQueryConfigProvider,
5-
useQuery,
6-
queryCache,
7-
queryCaches,
8-
} from '../index'
3+
import { ReactQueryConfigProvider, useQuery, queryCache } from '../index'
94

10-
import { sleep } from './utils'
5+
import { sleep, queryKey } from './utils'
116

127
describe('ReactQueryConfigProvider', () => {
13-
afterEach(() => {
14-
queryCaches.forEach(cache => cache.clear({ notify: false }))
15-
})
16-
178
// // See https://github.com/tannerlinsley/react-query/issues/105
189
it('should allow overriding the config', async () => {
10+
const key = queryKey()
11+
1912
const onSuccess = jest.fn()
2013

2114
const config = {
@@ -25,7 +18,7 @@ describe('ReactQueryConfigProvider', () => {
2518
}
2619

2720
function Page() {
28-
const { status } = useQuery('test', async () => {
21+
const { status } = useQuery(key, async () => {
2922
await sleep(10)
3023
return 'data'
3124
})
@@ -49,6 +42,8 @@ describe('ReactQueryConfigProvider', () => {
4942
})
5043

5144
it('should allow overriding the default config from the outermost provider', async () => {
45+
const key = queryKey()
46+
5247
const outerConfig = {
5348
queries: {
5449
queryFn: jest.fn(async () => {
@@ -81,17 +76,19 @@ describe('ReactQueryConfigProvider', () => {
8176

8277
await waitFor(() => rendered.getByText('Placeholder'))
8378

84-
await queryCache.prefetchQuery('test')
79+
await queryCache.prefetchQuery(key)
8580

86-
expect(outerConfig.queries.queryFn).toHaveBeenCalledWith('test')
81+
expect(outerConfig.queries.queryFn).toHaveBeenCalledWith(key)
8782
expect(innerConfig.queries.queryFn).not.toHaveBeenCalled()
8883

89-
const data = queryCache.getQueryData('test')
84+
const data = queryCache.getQueryData(key)
9085

9186
expect(data).toEqual('outer')
9287
})
9388

9489
it('should reset to defaults when unmounted', async () => {
90+
const key = queryKey()
91+
9592
const onSuccess = jest.fn()
9693

9794
const config = {
@@ -125,7 +122,7 @@ describe('ReactQueryConfigProvider', () => {
125122
}
126123

127124
function Page() {
128-
const { data } = useQuery('test', queryFn)
125+
const { data } = useQuery(key, queryFn)
129126

130127
return (
131128
<div>
@@ -139,7 +136,7 @@ describe('ReactQueryConfigProvider', () => {
139136
await waitFor(() => rendered.getByText('Data: none'))
140137

141138
act(() => {
142-
queryCache.prefetchQuery('test', queryFn)
139+
queryCache.prefetchQuery(key, queryFn)
143140
})
144141

145142
await waitFor(() => rendered.getByText('Data: data'))
@@ -149,15 +146,15 @@ describe('ReactQueryConfigProvider', () => {
149146
fireEvent.click(rendered.getByText('unmount'))
150147

151148
act(() => {
152-
// wipe query cache/stored config
153-
queryCache.clear({ notify: false })
154149
onSuccess.mockClear()
155150
})
156151

157152
await waitFor(() => rendered.getByText('Data: data'))
158153
})
159154

160155
it('should reset to previous config when nested provider is unmounted', async () => {
156+
const key = queryKey()
157+
161158
let counterRef = 0
162159
const parentOnSuccess = jest.fn()
163160

@@ -184,7 +181,7 @@ describe('ReactQueryConfigProvider', () => {
184181
}
185182

186183
function Component() {
187-
const { data, refetch } = useQuery('test', queryFn)
184+
const { data, refetch } = useQuery(key, queryFn)
188185

189186
return (
190187
<div>

0 commit comments

Comments
 (0)