@@ -1202,4 +1202,104 @@ describe('dehydration and rehydration', () => {
1202
1202
clientQueryClient . clear ( )
1203
1203
serverQueryClient . clear ( )
1204
1204
} )
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
+ } )
1205
1305
} )
0 commit comments