Skip to content

Commit 727230f

Browse files
minseong0324TkDodo
andauthoredApr 14, 2025··
test(query-core): add test case for hydration (#8949)
* test(query-core): add test case * Reflect feedback * Remove unnecessary code * reflect not share a client between tests * reflect feedback --------- Co-authored-by: Dominik Dorfmeister <office@dorfmeister.cc>
1 parent ea9d373 commit 727230f

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed
 

Diff for: ‎packages/query-core/src/__tests__/hydration.test.tsx

+100
Original file line numberDiff line numberDiff line change
@@ -1202,4 +1202,104 @@ describe('dehydration and rehydration', () => {
12021202
clientQueryClient.clear()
12031203
serverQueryClient.clear()
12041204
})
1205+
1206+
test('should not redact errors when shouldRedactErrors returns false', async () => {
1207+
const queryCache = new QueryCache()
1208+
const queryClient = createQueryClient({
1209+
queryCache,
1210+
defaultOptions: {
1211+
dehydrate: {
1212+
shouldDehydrateQuery: () => true,
1213+
shouldRedactErrors: () => false,
1214+
},
1215+
},
1216+
})
1217+
1218+
const testError = new Error('original error')
1219+
1220+
const promise = queryClient
1221+
.prefetchQuery({
1222+
queryKey: ['error'],
1223+
queryFn: () => Promise.reject(testError),
1224+
retry: false,
1225+
})
1226+
.catch(() => undefined)
1227+
1228+
const dehydrated = dehydrate(queryClient)
1229+
1230+
expect(dehydrated.queries[0]?.promise).toBeInstanceOf(Promise)
1231+
await expect(dehydrated.queries[0]?.promise).rejects.toBe(testError)
1232+
await promise
1233+
})
1234+
1235+
test('should handle errors in promises for pending queries', async () => {
1236+
const consoleMock = vi.spyOn(console, 'error')
1237+
consoleMock.mockImplementation(() => undefined)
1238+
1239+
const queryCache = new QueryCache()
1240+
const queryClient = createQueryClient({
1241+
queryCache,
1242+
defaultOptions: {
1243+
dehydrate: {
1244+
shouldDehydrateQuery: () => true,
1245+
},
1246+
},
1247+
})
1248+
1249+
const promise = queryClient
1250+
.prefetchQuery({
1251+
queryKey: ['error'],
1252+
queryFn: () => Promise.reject(new Error('test error')),
1253+
retry: false,
1254+
})
1255+
.catch(() => undefined)
1256+
1257+
const dehydrated = dehydrate(queryClient)
1258+
1259+
expect(dehydrated.queries[0]?.promise).toBeInstanceOf(Promise)
1260+
1261+
await expect(dehydrated.queries[0]?.promise).rejects.toThrow('redacted')
1262+
await promise
1263+
consoleMock.mockRestore()
1264+
})
1265+
1266+
test('should log error in development environment when redacting errors', async () => {
1267+
const originalNodeEnv = process.env.NODE_ENV
1268+
process.env.NODE_ENV = 'development'
1269+
1270+
const consoleMock = vi.spyOn(console, 'error')
1271+
consoleMock.mockImplementation(() => undefined)
1272+
1273+
const queryCache = new QueryCache()
1274+
const queryClient = createQueryClient({
1275+
queryCache,
1276+
defaultOptions: {
1277+
dehydrate: {
1278+
shouldDehydrateQuery: () => true,
1279+
shouldRedactErrors: () => true,
1280+
},
1281+
},
1282+
})
1283+
1284+
const testError = new Error('test error')
1285+
1286+
const promise = queryClient
1287+
.prefetchQuery({
1288+
queryKey: ['error'],
1289+
queryFn: () => Promise.reject(testError),
1290+
retry: false,
1291+
})
1292+
.catch(() => undefined)
1293+
1294+
const dehydrated = dehydrate(queryClient)
1295+
1296+
await expect(dehydrated.queries[0]?.promise).rejects.toThrow('redacted')
1297+
expect(consoleMock).toHaveBeenCalledWith(
1298+
expect.stringContaining('test error'),
1299+
)
1300+
await promise
1301+
1302+
process.env.NODE_ENV = originalNodeEnv
1303+
consoleMock.mockRestore()
1304+
})
12051305
})

0 commit comments

Comments
 (0)
Please sign in to comment.