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)