Skip to content

Commit 2be8cca

Browse files
authored
test(query-core): add test case for queryObserver (#9146)
* test(query-core): add test case for queryObserver * fix test
1 parent 5c9bd11 commit 2be8cca

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

packages/query-core/src/__tests__/queryObserver.test.tsx

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1271,4 +1271,90 @@ describe('queryObserver', () => {
12711271

12721272
unsubscribe()
12731273
})
1274+
1275+
test('shouldFetchOnWindowFocus should respect refetchOnWindowFocus option', () => {
1276+
const key = queryKey()
1277+
1278+
const observer1 = new QueryObserver(queryClient, {
1279+
queryKey: key,
1280+
queryFn: () => 'data',
1281+
refetchOnWindowFocus: true,
1282+
})
1283+
expect(observer1.shouldFetchOnWindowFocus()).toBe(true)
1284+
1285+
const observer2 = new QueryObserver(queryClient, {
1286+
queryKey: key,
1287+
queryFn: () => 'data',
1288+
refetchOnWindowFocus: false,
1289+
})
1290+
expect(observer2.shouldFetchOnWindowFocus()).toBe(false)
1291+
})
1292+
1293+
test('fetchOptimistic should fetch and return optimistic result', async () => {
1294+
const key = queryKey()
1295+
const observer = new QueryObserver(queryClient, {
1296+
queryKey: key,
1297+
queryFn: () => 'data',
1298+
})
1299+
1300+
const result = await observer.fetchOptimistic({
1301+
queryKey: key,
1302+
queryFn: () => 'data',
1303+
})
1304+
1305+
expect(result.status).toBe('success')
1306+
expect(result.data).toBe('data')
1307+
})
1308+
1309+
test('should track error prop when throwOnError is true', async () => {
1310+
const key = queryKey()
1311+
const results: Array<QueryObserverResult> = []
1312+
const observer = new QueryObserver(queryClient, {
1313+
queryKey: key,
1314+
queryFn: () => Promise.reject('error'),
1315+
retry: false,
1316+
throwOnError: true,
1317+
})
1318+
1319+
const trackedResult = observer.trackResult(
1320+
observer.getCurrentResult(),
1321+
(prop) => {
1322+
if (prop === 'data' || prop === 'status') {
1323+
observer.trackProp(prop)
1324+
}
1325+
},
1326+
)
1327+
1328+
trackedResult.data
1329+
trackedResult.status
1330+
1331+
const unsubscribe = observer.subscribe((result) => {
1332+
results.push(result)
1333+
})
1334+
1335+
await vi.waitFor(() => {
1336+
const lastResult = results[results.length - 1]
1337+
expect(lastResult?.status).toBe('error')
1338+
})
1339+
1340+
expect(results.length).toBe(1)
1341+
expect(results[0]).toMatchObject({
1342+
status: 'error',
1343+
error: 'error',
1344+
})
1345+
1346+
unsubscribe()
1347+
})
1348+
1349+
test('should set fetchStatus to idle when _optimisticResults is isRestoring', () => {
1350+
const key = queryKey()
1351+
const observer = new QueryObserver(queryClient, {
1352+
queryKey: key,
1353+
queryFn: () => 'data',
1354+
_optimisticResults: 'isRestoring',
1355+
})
1356+
1357+
const result = observer.getCurrentResult()
1358+
expect(result.fetchStatus).toBe('idle')
1359+
})
12741360
})

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy