@@ -9,16 +9,15 @@ import {
9
9
beforeEach ,
10
10
jest ,
11
11
afterAll ,
12
- mock ,
12
+ spyOn ,
13
13
} from "bun:test"
14
14
import { FetchProxy } from "../src/proxy"
15
15
16
- // Mock fetch for testing
17
- const mockFetch = jest . fn ( )
18
- ; ( global as any ) . fetch = mockFetch
16
+ // Spy on fetch for testing
17
+ let fetchSpy : ReturnType < typeof spyOn >
19
18
20
19
afterAll ( ( ) => {
21
- mock . restore ( )
20
+ fetchSpy ?. mockRestore ( )
22
21
} )
23
22
24
23
describe ( "Proxy Fallback Response" , ( ) => {
@@ -29,13 +28,14 @@ describe("Proxy Fallback Response", () => {
29
28
base : "https://api.example.com" ,
30
29
timeout : 5000 ,
31
30
} )
32
- mockFetch . mockClear ( )
31
+ fetchSpy = spyOn ( global , "fetch" )
32
+ fetchSpy . mockClear ( )
33
33
} )
34
34
35
35
describe ( "onError Hook Fallback" , ( ) => {
36
36
it ( "should return fallback response when onError hook provides one" , async ( ) => {
37
37
// Mock a network error
38
- mockFetch . mockRejectedValue ( new Error ( "Network error" ) )
38
+ fetchSpy . mockRejectedValue ( new Error ( "Network error" ) )
39
39
40
40
const fallbackResponse = new Response (
41
41
JSON . stringify ( {
@@ -68,7 +68,7 @@ describe("Proxy Fallback Response", () => {
68
68
} )
69
69
70
70
it ( "should handle async fallback response generation" , async ( ) => {
71
- mockFetch . mockRejectedValue ( new Error ( "Timeout error" ) )
71
+ fetchSpy . mockRejectedValue ( new Error ( "Timeout error" ) )
72
72
73
73
const onErrorHook = jest . fn ( ) . mockImplementation ( async ( req , error ) => {
74
74
// Simulate async fallback logic
@@ -108,7 +108,7 @@ describe("Proxy Fallback Response", () => {
108
108
} )
109
109
110
110
it ( "should fallback to default error response when onError hook returns void" , async ( ) => {
111
- mockFetch . mockRejectedValue ( new Error ( "Network error" ) )
111
+ fetchSpy . mockRejectedValue ( new Error ( "Network error" ) )
112
112
113
113
const onErrorHook = jest . fn ( ) . mockResolvedValue ( undefined )
114
114
@@ -147,7 +147,7 @@ describe("Proxy Fallback Response", () => {
147
147
]
148
148
149
149
for ( const testCase of testCases ) {
150
- mockFetch . mockRejectedValue ( testCase . error )
150
+ fetchSpy . mockRejectedValue ( testCase . error )
151
151
152
152
const onErrorHook = jest . fn ( ) . mockResolvedValue (
153
153
new Response ( JSON . stringify ( { message : testCase . fallbackMessage } ) , {
@@ -179,7 +179,7 @@ describe("Proxy Fallback Response", () => {
179
179
} )
180
180
181
181
// First request fails to trigger circuit breaker
182
- mockFetch . mockRejectedValue ( new Error ( "Service error" ) )
182
+ fetchSpy . mockRejectedValue ( new Error ( "Service error" ) )
183
183
184
184
const onErrorHook = jest
185
185
. fn ( )
@@ -241,7 +241,7 @@ describe("Proxy Fallback Response", () => {
241
241
242
242
it ( "should pass correct request and error objects to onError hook" , async ( ) => {
243
243
const networkError = new Error ( "ECONNREFUSED" )
244
- mockFetch . mockRejectedValue ( networkError )
244
+ fetchSpy . mockRejectedValue ( networkError )
245
245
246
246
const onErrorHook = jest
247
247
. fn ( )
@@ -269,7 +269,7 @@ describe("Proxy Fallback Response", () => {
269
269
} )
270
270
271
271
it ( "should handle multiple concurrent requests with fallback" , async ( ) => {
272
- mockFetch . mockRejectedValue ( new Error ( "Service unavailable" ) )
272
+ fetchSpy . mockRejectedValue ( new Error ( "Service unavailable" ) )
273
273
274
274
const onErrorHook = jest . fn ( ) . mockImplementation ( async ( req , error ) => {
275
275
return new Response (
@@ -312,7 +312,7 @@ describe("Proxy Fallback Response", () => {
312
312
} )
313
313
314
314
it ( "should handle onError hook that throws an error" , async ( ) => {
315
- mockFetch . mockRejectedValue ( new Error ( "Network error" ) )
315
+ fetchSpy . mockRejectedValue ( new Error ( "Network error" ) )
316
316
317
317
const onErrorHook = jest . fn ( ) . mockImplementation ( async ( ) => {
318
318
throw new Error ( "Hook error" )
@@ -333,7 +333,7 @@ describe("Proxy Fallback Response", () => {
333
333
} )
334
334
335
335
it ( "should handle fallback response with custom headers" , async ( ) => {
336
- mockFetch . mockRejectedValue ( new Error ( "Service error" ) )
336
+ fetchSpy . mockRejectedValue ( new Error ( "Service error" ) )
337
337
338
338
const onErrorHook = jest . fn ( ) . mockResolvedValue (
339
339
new Response ( JSON . stringify ( { fallback : true } ) , {
@@ -359,7 +359,7 @@ describe("Proxy Fallback Response", () => {
359
359
} )
360
360
361
361
it ( "should handle streaming fallback response" , async ( ) => {
362
- mockFetch . mockRejectedValue ( new Error ( "Streaming error" ) )
362
+ fetchSpy . mockRejectedValue ( new Error ( "Streaming error" ) )
363
363
364
364
const onErrorHook = jest . fn ( ) . mockImplementation ( async ( req , error ) => {
365
365
const stream = new ReadableStream ( {
@@ -397,7 +397,7 @@ describe("Proxy Fallback Response", () => {
397
397
398
398
describe ( "Integration with Other Features" , ( ) => {
399
399
it ( "should work with beforeRequest and afterResponse hooks" , async ( ) => {
400
- mockFetch . mockRejectedValue ( new Error ( "Network error" ) )
400
+ fetchSpy . mockRejectedValue ( new Error ( "Network error" ) )
401
401
402
402
const beforeRequestHook = jest . fn ( )
403
403
const afterResponseHook = jest . fn ( )
@@ -420,7 +420,7 @@ describe("Proxy Fallback Response", () => {
420
420
} )
421
421
422
422
it ( "should work with custom headers and query parameters" , async ( ) => {
423
- mockFetch . mockRejectedValue ( new Error ( "Network error" ) )
423
+ fetchSpy . mockRejectedValue ( new Error ( "Network error" ) )
424
424
425
425
const onErrorHook = jest
426
426
. fn ( )
0 commit comments