@@ -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