@tanstack/vue-query 5.59.17 → 5.59.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -3
- package/src/__tests__/infiniteQueryOptions.test-d.ts +0 -111
- package/src/__tests__/mutationCache.test.ts +0 -39
- package/src/__tests__/queryCache.test.ts +0 -47
- package/src/__tests__/queryClient.test-d.ts +0 -132
- package/src/__tests__/queryClient.test.ts +0 -433
- package/src/__tests__/queryOptions.test-d.ts +0 -125
- package/src/__tests__/test-utils.ts +0 -52
- package/src/__tests__/useInfiniteQuery.test-d.tsx +0 -84
- package/src/__tests__/useInfiniteQuery.test.ts +0 -69
- package/src/__tests__/useIsFetching.test.ts +0 -76
- package/src/__tests__/useIsMutating.test.ts +0 -122
- package/src/__tests__/useMutation.test-d.tsx +0 -74
- package/src/__tests__/useMutation.test.ts +0 -355
- package/src/__tests__/useQueries.test-d.ts +0 -222
- package/src/__tests__/useQueries.test.ts +0 -370
- package/src/__tests__/useQuery.test-d.ts +0 -271
- package/src/__tests__/useQuery.test.ts +0 -497
- package/src/__tests__/useQueryClient.test.ts +0 -51
- package/src/__tests__/utils.test.ts +0 -155
- package/src/__tests__/vueQueryPlugin.test.ts +0 -393
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
import { describe, expectTypeOf, it } from 'vitest'
|
|
2
|
-
import { reactive } from 'vue'
|
|
3
|
-
import { skipToken, useQueries } from '..'
|
|
4
|
-
import { queryOptions } from '../queryOptions'
|
|
5
|
-
import type { OmitKeyof, QueryObserverResult } from '..'
|
|
6
|
-
import type { UseQueryOptions } from '../useQuery'
|
|
7
|
-
|
|
8
|
-
describe('UseQueries config object overload', () => {
|
|
9
|
-
it('TData should always be defined when initialData is provided as an object', () => {
|
|
10
|
-
const query1 = {
|
|
11
|
-
queryKey: ['key1'],
|
|
12
|
-
queryFn: () => {
|
|
13
|
-
return {
|
|
14
|
-
wow: true,
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
initialData: {
|
|
18
|
-
wow: false,
|
|
19
|
-
},
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const query2 = queryOptions({
|
|
23
|
-
queryKey: ['key2'],
|
|
24
|
-
queryFn: () => 'Query Data',
|
|
25
|
-
initialData: 'initial data',
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
const query3 = {
|
|
29
|
-
queryKey: ['key2'],
|
|
30
|
-
queryFn: () => 'Query Data',
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const { value: queriesState } = useQueries({
|
|
34
|
-
queries: [query1, query2, query3],
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
expectTypeOf(queriesState[0].data).toEqualTypeOf<{ wow: boolean }>()
|
|
38
|
-
expectTypeOf(queriesState[1].data).toEqualTypeOf<string>()
|
|
39
|
-
expectTypeOf(queriesState[2].data).toEqualTypeOf<string | undefined>()
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
it('TData should be defined when passed through queryOptions', () => {
|
|
43
|
-
const options = queryOptions({
|
|
44
|
-
queryKey: ['key'],
|
|
45
|
-
queryFn: () => {
|
|
46
|
-
return {
|
|
47
|
-
wow: true,
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
initialData: {
|
|
51
|
-
wow: true,
|
|
52
|
-
},
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
const { value: queriesState } = useQueries({ queries: [options] })
|
|
56
|
-
|
|
57
|
-
expectTypeOf(queriesState[0].data).toEqualTypeOf<{ wow: boolean }>()
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
it('should be possible to define a different TData than TQueryFnData using select with queryOptions spread into useQueries', () => {
|
|
61
|
-
const query1 = queryOptions({
|
|
62
|
-
queryKey: ['key'],
|
|
63
|
-
queryFn: () => Promise.resolve(1),
|
|
64
|
-
select: (data) => data > 1,
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
const query2 = {
|
|
68
|
-
queryKey: ['key'],
|
|
69
|
-
queryFn: () => Promise.resolve(1),
|
|
70
|
-
select: (data: any) => data > 1,
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const queriesState = reactive(useQueries({ queries: [query1, query2] }))
|
|
74
|
-
|
|
75
|
-
expectTypeOf(queriesState.value[0].data).toEqualTypeOf<
|
|
76
|
-
boolean | undefined
|
|
77
|
-
>()
|
|
78
|
-
expectTypeOf(queriesState.value[1].data).toEqualTypeOf<
|
|
79
|
-
boolean | undefined
|
|
80
|
-
>()
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
it('TData should have undefined in the union when initialData is provided as a function which can return undefined', () => {
|
|
84
|
-
const { value: queriesState } = useQueries({
|
|
85
|
-
queries: [
|
|
86
|
-
{
|
|
87
|
-
queryKey: ['key'],
|
|
88
|
-
queryFn: () => {
|
|
89
|
-
return {
|
|
90
|
-
wow: true,
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
initialData: () => undefined as { wow: boolean } | undefined,
|
|
94
|
-
},
|
|
95
|
-
],
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
expectTypeOf(queriesState[0].data).toEqualTypeOf<
|
|
99
|
-
{ wow: boolean } | undefined
|
|
100
|
-
>()
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
it('TData should have correct type when conditional skipToken is passed', () => {
|
|
104
|
-
const { value: queriesState } = useQueries({
|
|
105
|
-
queries: [
|
|
106
|
-
queryOptions({
|
|
107
|
-
queryKey: ['key'],
|
|
108
|
-
queryFn: Math.random() > 0.5 ? skipToken : () => Promise.resolve(5),
|
|
109
|
-
}),
|
|
110
|
-
],
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
const firstResult = queriesState[0]
|
|
114
|
-
|
|
115
|
-
expectTypeOf(firstResult).toEqualTypeOf<
|
|
116
|
-
QueryObserverResult<number, Error>
|
|
117
|
-
>()
|
|
118
|
-
expectTypeOf(firstResult.data).toEqualTypeOf<number | undefined>()
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
describe('custom hook', () => {
|
|
122
|
-
it('should allow custom hooks using UseQueryOptions', () => {
|
|
123
|
-
const useCustomQueries = (
|
|
124
|
-
options?: OmitKeyof<
|
|
125
|
-
UseQueryOptions<string>,
|
|
126
|
-
'queryKey' | 'queryFn',
|
|
127
|
-
'safely'
|
|
128
|
-
>,
|
|
129
|
-
) =>
|
|
130
|
-
useQueries({
|
|
131
|
-
queries: [
|
|
132
|
-
{
|
|
133
|
-
...options,
|
|
134
|
-
queryKey: ['todos-key'],
|
|
135
|
-
queryFn: () => Promise.resolve('data'),
|
|
136
|
-
},
|
|
137
|
-
],
|
|
138
|
-
})
|
|
139
|
-
|
|
140
|
-
const { value: queriesState } = useCustomQueries()
|
|
141
|
-
|
|
142
|
-
expectTypeOf(queriesState[0].data).toEqualTypeOf<string | undefined>()
|
|
143
|
-
})
|
|
144
|
-
})
|
|
145
|
-
|
|
146
|
-
// Fix #7270
|
|
147
|
-
it('should have proper type inference with different options provided', () => {
|
|
148
|
-
const numbers = [1, 2, 3]
|
|
149
|
-
const queryKey = (n: number) => [n]
|
|
150
|
-
const queryFn = (n: number) => () => Promise.resolve(n)
|
|
151
|
-
const select = (data: number) => data.toString()
|
|
152
|
-
|
|
153
|
-
const queries = numbers.map((n) => ({
|
|
154
|
-
queryKey: [n],
|
|
155
|
-
queryFn: () => Promise.resolve(n),
|
|
156
|
-
select: (data: number) => data.toString(),
|
|
157
|
-
}))
|
|
158
|
-
|
|
159
|
-
const queriesWithoutSelect = numbers.map((n) => ({
|
|
160
|
-
queryKey: queryKey(n),
|
|
161
|
-
queryFn: queryFn(n),
|
|
162
|
-
}))
|
|
163
|
-
|
|
164
|
-
const queriesWithQueryOptions = numbers.map((n) =>
|
|
165
|
-
queryOptions({
|
|
166
|
-
queryKey: queryKey(n),
|
|
167
|
-
queryFn: queryFn(n),
|
|
168
|
-
select,
|
|
169
|
-
}),
|
|
170
|
-
)
|
|
171
|
-
|
|
172
|
-
const queriesWithQueryOptionsWithoutSelect = numbers.map((n) =>
|
|
173
|
-
queryOptions({
|
|
174
|
-
queryKey: queryKey(n),
|
|
175
|
-
queryFn: queryFn(n),
|
|
176
|
-
}),
|
|
177
|
-
)
|
|
178
|
-
|
|
179
|
-
const query1 = useQueries({ queries: queries })
|
|
180
|
-
expectTypeOf(query1.value).toEqualTypeOf<
|
|
181
|
-
Array<QueryObserverResult<string, Error>>
|
|
182
|
-
>()
|
|
183
|
-
|
|
184
|
-
const query2 = useQueries({ queries: queriesWithoutSelect })
|
|
185
|
-
expectTypeOf(query2.value).toEqualTypeOf<
|
|
186
|
-
Array<QueryObserverResult<number, Error>>
|
|
187
|
-
>()
|
|
188
|
-
|
|
189
|
-
const query3 = useQueries({ queries: queriesWithQueryOptions })
|
|
190
|
-
expectTypeOf(query3.value).toEqualTypeOf<
|
|
191
|
-
Array<QueryObserverResult<string, Error>>
|
|
192
|
-
>()
|
|
193
|
-
|
|
194
|
-
const query4 = useQueries({ queries: queriesWithQueryOptionsWithoutSelect })
|
|
195
|
-
expectTypeOf(query4.value).toEqualTypeOf<
|
|
196
|
-
Array<QueryObserverResult<number, Error>>
|
|
197
|
-
>()
|
|
198
|
-
|
|
199
|
-
const queryCombine = useQueries({
|
|
200
|
-
queries: queries,
|
|
201
|
-
combine: (data) => {
|
|
202
|
-
return data.reduce((acc, i) => {
|
|
203
|
-
acc.push(i.data ?? '')
|
|
204
|
-
return acc
|
|
205
|
-
}, [] as Array<string>)
|
|
206
|
-
},
|
|
207
|
-
})
|
|
208
|
-
expectTypeOf(queryCombine.value).toEqualTypeOf<Array<string>>()
|
|
209
|
-
|
|
210
|
-
const queryCombineWithoutSelect = useQueries({
|
|
211
|
-
queries: queriesWithoutSelect,
|
|
212
|
-
combine: (data) => {
|
|
213
|
-
return data.reduce((acc, i) => {
|
|
214
|
-
acc.push(i.data ?? 0)
|
|
215
|
-
return acc
|
|
216
|
-
}, [] as Array<number>)
|
|
217
|
-
},
|
|
218
|
-
})
|
|
219
|
-
|
|
220
|
-
expectTypeOf(queryCombineWithoutSelect.value).toEqualTypeOf<Array<number>>()
|
|
221
|
-
})
|
|
222
|
-
})
|
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, test, vi } from 'vitest'
|
|
2
|
-
import { onScopeDispose, ref } from 'vue-demi'
|
|
3
|
-
import { useQueries } from '../useQueries'
|
|
4
|
-
import { useQueryClient } from '../useQueryClient'
|
|
5
|
-
import { QueryClient } from '../queryClient'
|
|
6
|
-
import {
|
|
7
|
-
flushPromises,
|
|
8
|
-
getSimpleFetcherWithReturnData,
|
|
9
|
-
rejectFetcher,
|
|
10
|
-
simpleFetcher,
|
|
11
|
-
} from './test-utils'
|
|
12
|
-
import type { MockedFunction } from 'vitest'
|
|
13
|
-
|
|
14
|
-
vi.mock('../useQueryClient')
|
|
15
|
-
|
|
16
|
-
describe('useQueries', () => {
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
vi.restoreAllMocks()
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
test('should return result for each query', () => {
|
|
22
|
-
const queries = [
|
|
23
|
-
{
|
|
24
|
-
queryKey: ['key1'],
|
|
25
|
-
queryFn: simpleFetcher,
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
queryKey: ['key2'],
|
|
29
|
-
queryFn: simpleFetcher,
|
|
30
|
-
},
|
|
31
|
-
]
|
|
32
|
-
const queriesState = useQueries({ queries })
|
|
33
|
-
|
|
34
|
-
expect(queriesState.value).toMatchObject([
|
|
35
|
-
{
|
|
36
|
-
status: 'pending',
|
|
37
|
-
isPending: true,
|
|
38
|
-
isFetching: true,
|
|
39
|
-
isStale: true,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
status: 'pending',
|
|
43
|
-
isPending: true,
|
|
44
|
-
isFetching: true,
|
|
45
|
-
isStale: true,
|
|
46
|
-
},
|
|
47
|
-
])
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
test('should resolve to success and update reactive state', async () => {
|
|
51
|
-
const queries = [
|
|
52
|
-
{
|
|
53
|
-
queryKey: ['key11'],
|
|
54
|
-
queryFn: simpleFetcher,
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
queryKey: ['key12'],
|
|
58
|
-
queryFn: simpleFetcher,
|
|
59
|
-
},
|
|
60
|
-
]
|
|
61
|
-
const queriesState = useQueries({ queries })
|
|
62
|
-
|
|
63
|
-
await flushPromises()
|
|
64
|
-
|
|
65
|
-
expect(queriesState.value).toMatchObject([
|
|
66
|
-
{
|
|
67
|
-
status: 'success',
|
|
68
|
-
isPending: false,
|
|
69
|
-
isFetching: false,
|
|
70
|
-
isStale: true,
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
status: 'success',
|
|
74
|
-
isPending: false,
|
|
75
|
-
isFetching: false,
|
|
76
|
-
isStale: true,
|
|
77
|
-
},
|
|
78
|
-
])
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
test('should reject one of the queries and update reactive state', async () => {
|
|
82
|
-
const queries = [
|
|
83
|
-
{
|
|
84
|
-
queryKey: ['key21'],
|
|
85
|
-
queryFn: rejectFetcher,
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
queryKey: ['key22'],
|
|
89
|
-
queryFn: simpleFetcher,
|
|
90
|
-
},
|
|
91
|
-
]
|
|
92
|
-
const queriesState = useQueries({ queries })
|
|
93
|
-
|
|
94
|
-
await flushPromises()
|
|
95
|
-
|
|
96
|
-
expect(queriesState.value).toMatchObject([
|
|
97
|
-
{
|
|
98
|
-
status: 'error',
|
|
99
|
-
isPending: false,
|
|
100
|
-
isFetching: false,
|
|
101
|
-
isStale: true,
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
status: 'success',
|
|
105
|
-
isPending: false,
|
|
106
|
-
isFetching: false,
|
|
107
|
-
isStale: true,
|
|
108
|
-
},
|
|
109
|
-
])
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
test('should return state for new queries', async () => {
|
|
113
|
-
const queries = ref([
|
|
114
|
-
{
|
|
115
|
-
queryKey: ['key31'],
|
|
116
|
-
queryFn: getSimpleFetcherWithReturnData('value31'),
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
queryKey: ['key32'],
|
|
120
|
-
queryFn: getSimpleFetcherWithReturnData('value32'),
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
queryKey: ['key33'],
|
|
124
|
-
queryFn: getSimpleFetcherWithReturnData('value33'),
|
|
125
|
-
},
|
|
126
|
-
])
|
|
127
|
-
const queriesState = useQueries({ queries })
|
|
128
|
-
|
|
129
|
-
await flushPromises()
|
|
130
|
-
|
|
131
|
-
queries.value.splice(
|
|
132
|
-
0,
|
|
133
|
-
queries.value.length,
|
|
134
|
-
{
|
|
135
|
-
queryKey: ['key31'],
|
|
136
|
-
queryFn: getSimpleFetcherWithReturnData('value31'),
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
queryKey: ['key34'],
|
|
140
|
-
queryFn: getSimpleFetcherWithReturnData('value34'),
|
|
141
|
-
},
|
|
142
|
-
)
|
|
143
|
-
|
|
144
|
-
await flushPromises()
|
|
145
|
-
await flushPromises()
|
|
146
|
-
|
|
147
|
-
expect(queriesState.value.length).toEqual(2)
|
|
148
|
-
expect(queriesState.value).toMatchObject([
|
|
149
|
-
{
|
|
150
|
-
data: 'value31',
|
|
151
|
-
status: 'success',
|
|
152
|
-
isPending: false,
|
|
153
|
-
isFetching: false,
|
|
154
|
-
isStale: true,
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
data: 'value34',
|
|
158
|
-
status: 'success',
|
|
159
|
-
isPending: false,
|
|
160
|
-
isFetching: false,
|
|
161
|
-
isStale: true,
|
|
162
|
-
},
|
|
163
|
-
])
|
|
164
|
-
})
|
|
165
|
-
|
|
166
|
-
test('should stop listening to changes on onScopeDispose', async () => {
|
|
167
|
-
const onScopeDisposeMock = onScopeDispose as MockedFunction<
|
|
168
|
-
typeof onScopeDispose
|
|
169
|
-
>
|
|
170
|
-
onScopeDisposeMock.mockImplementationOnce((fn) => fn())
|
|
171
|
-
|
|
172
|
-
const queries = [
|
|
173
|
-
{
|
|
174
|
-
queryKey: ['key41'],
|
|
175
|
-
queryFn: simpleFetcher,
|
|
176
|
-
},
|
|
177
|
-
{
|
|
178
|
-
queryKey: ['key42'],
|
|
179
|
-
queryFn: simpleFetcher,
|
|
180
|
-
},
|
|
181
|
-
]
|
|
182
|
-
const queriesState = useQueries({ queries })
|
|
183
|
-
await flushPromises()
|
|
184
|
-
|
|
185
|
-
expect(queriesState.value).toMatchObject([
|
|
186
|
-
{
|
|
187
|
-
status: 'pending',
|
|
188
|
-
isPending: true,
|
|
189
|
-
isFetching: true,
|
|
190
|
-
isStale: true,
|
|
191
|
-
},
|
|
192
|
-
{
|
|
193
|
-
status: 'pending',
|
|
194
|
-
isPending: true,
|
|
195
|
-
isFetching: true,
|
|
196
|
-
isStale: true,
|
|
197
|
-
},
|
|
198
|
-
])
|
|
199
|
-
})
|
|
200
|
-
|
|
201
|
-
test('should use queryClient provided via options', async () => {
|
|
202
|
-
const queryClient = new QueryClient()
|
|
203
|
-
const queries = [
|
|
204
|
-
{
|
|
205
|
-
queryKey: ['key41'],
|
|
206
|
-
queryFn: simpleFetcher,
|
|
207
|
-
},
|
|
208
|
-
{
|
|
209
|
-
queryKey: ['key42'],
|
|
210
|
-
queryFn: simpleFetcher,
|
|
211
|
-
},
|
|
212
|
-
]
|
|
213
|
-
|
|
214
|
-
useQueries({ queries }, queryClient)
|
|
215
|
-
await flushPromises()
|
|
216
|
-
|
|
217
|
-
expect(useQueryClient).toHaveBeenCalledTimes(0)
|
|
218
|
-
})
|
|
219
|
-
|
|
220
|
-
test('should combine queries', async () => {
|
|
221
|
-
const firstResult = 'first result'
|
|
222
|
-
const secondResult = 'second result'
|
|
223
|
-
|
|
224
|
-
const queryClient = new QueryClient()
|
|
225
|
-
const queries = [
|
|
226
|
-
{
|
|
227
|
-
queryKey: ['key41'],
|
|
228
|
-
queryFn: getSimpleFetcherWithReturnData(firstResult),
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
queryKey: ['key42'],
|
|
232
|
-
queryFn: getSimpleFetcherWithReturnData(secondResult),
|
|
233
|
-
},
|
|
234
|
-
]
|
|
235
|
-
|
|
236
|
-
const queriesResult = useQueries(
|
|
237
|
-
{
|
|
238
|
-
queries,
|
|
239
|
-
combine: (results) => {
|
|
240
|
-
return {
|
|
241
|
-
combined: true,
|
|
242
|
-
res: results.map((res) => res.data),
|
|
243
|
-
}
|
|
244
|
-
},
|
|
245
|
-
},
|
|
246
|
-
queryClient,
|
|
247
|
-
)
|
|
248
|
-
await flushPromises()
|
|
249
|
-
|
|
250
|
-
expect(queriesResult.value).toMatchObject({
|
|
251
|
-
combined: true,
|
|
252
|
-
res: [firstResult, secondResult],
|
|
253
|
-
})
|
|
254
|
-
})
|
|
255
|
-
|
|
256
|
-
test('should be `enabled` to accept getter function', async () => {
|
|
257
|
-
const fetchFn = vi.fn()
|
|
258
|
-
const checked = ref(false)
|
|
259
|
-
|
|
260
|
-
useQueries({
|
|
261
|
-
queries: [
|
|
262
|
-
{
|
|
263
|
-
queryKey: ['enabled'],
|
|
264
|
-
queryFn: fetchFn,
|
|
265
|
-
enabled: () => checked.value,
|
|
266
|
-
},
|
|
267
|
-
],
|
|
268
|
-
})
|
|
269
|
-
|
|
270
|
-
expect(fetchFn).not.toHaveBeenCalled()
|
|
271
|
-
|
|
272
|
-
checked.value = true
|
|
273
|
-
|
|
274
|
-
await flushPromises()
|
|
275
|
-
|
|
276
|
-
expect(fetchFn).toHaveBeenCalled()
|
|
277
|
-
})
|
|
278
|
-
|
|
279
|
-
test('should allow getters for query keys', async () => {
|
|
280
|
-
const fetchFn = vi.fn()
|
|
281
|
-
const key1 = ref('key1')
|
|
282
|
-
const key2 = ref('key2')
|
|
283
|
-
|
|
284
|
-
useQueries({
|
|
285
|
-
queries: [
|
|
286
|
-
{
|
|
287
|
-
queryKey: ['key', () => key1.value, () => key2.value],
|
|
288
|
-
queryFn: fetchFn,
|
|
289
|
-
},
|
|
290
|
-
],
|
|
291
|
-
})
|
|
292
|
-
|
|
293
|
-
expect(fetchFn).toHaveBeenCalledTimes(1)
|
|
294
|
-
|
|
295
|
-
key1.value = 'key3'
|
|
296
|
-
|
|
297
|
-
await flushPromises()
|
|
298
|
-
|
|
299
|
-
expect(fetchFn).toHaveBeenCalledTimes(2)
|
|
300
|
-
|
|
301
|
-
key2.value = 'key4'
|
|
302
|
-
|
|
303
|
-
await flushPromises()
|
|
304
|
-
|
|
305
|
-
expect(fetchFn).toHaveBeenCalledTimes(3)
|
|
306
|
-
})
|
|
307
|
-
|
|
308
|
-
test('should allow arbitrarily nested getters for query keys', async () => {
|
|
309
|
-
const fetchFn = vi.fn()
|
|
310
|
-
const key1 = ref('key1')
|
|
311
|
-
const key2 = ref('key2')
|
|
312
|
-
const key3 = ref('key3')
|
|
313
|
-
const key4 = ref('key4')
|
|
314
|
-
const key5 = ref('key5')
|
|
315
|
-
|
|
316
|
-
useQueries({
|
|
317
|
-
queries: [
|
|
318
|
-
{
|
|
319
|
-
queryKey: [
|
|
320
|
-
'key',
|
|
321
|
-
key1,
|
|
322
|
-
() => key2.value,
|
|
323
|
-
{ key: () => key3.value },
|
|
324
|
-
[{ foo: { bar: () => key4.value } }],
|
|
325
|
-
() => ({
|
|
326
|
-
foo: {
|
|
327
|
-
bar: {
|
|
328
|
-
baz: () => key5.value,
|
|
329
|
-
},
|
|
330
|
-
},
|
|
331
|
-
}),
|
|
332
|
-
],
|
|
333
|
-
queryFn: fetchFn,
|
|
334
|
-
},
|
|
335
|
-
],
|
|
336
|
-
})
|
|
337
|
-
|
|
338
|
-
expect(fetchFn).toHaveBeenCalledTimes(1)
|
|
339
|
-
|
|
340
|
-
key1.value = 'key1-updated'
|
|
341
|
-
|
|
342
|
-
await flushPromises()
|
|
343
|
-
|
|
344
|
-
expect(fetchFn).toHaveBeenCalledTimes(2)
|
|
345
|
-
|
|
346
|
-
key2.value = 'key2-updated'
|
|
347
|
-
|
|
348
|
-
await flushPromises()
|
|
349
|
-
|
|
350
|
-
expect(fetchFn).toHaveBeenCalledTimes(3)
|
|
351
|
-
|
|
352
|
-
key3.value = 'key3-updated'
|
|
353
|
-
|
|
354
|
-
await flushPromises()
|
|
355
|
-
|
|
356
|
-
expect(fetchFn).toHaveBeenCalledTimes(4)
|
|
357
|
-
|
|
358
|
-
key4.value = 'key4-updated'
|
|
359
|
-
|
|
360
|
-
await flushPromises()
|
|
361
|
-
|
|
362
|
-
expect(fetchFn).toHaveBeenCalledTimes(5)
|
|
363
|
-
|
|
364
|
-
key5.value = 'key5-updated'
|
|
365
|
-
|
|
366
|
-
await flushPromises()
|
|
367
|
-
|
|
368
|
-
expect(fetchFn).toHaveBeenCalledTimes(6)
|
|
369
|
-
})
|
|
370
|
-
})
|