@@ -45,6 +45,40 @@ const delay = async (delayMs: number): Promise<void> => {
4545 await new Promise < void > ( resolve => setTimeout ( resolve , delayMs ) )
4646}
4747
48+ const isRouteAlreadyHandledError = ( error : unknown ) : boolean => {
49+ return error instanceof Error && error . message . includes ( 'Route is already handled' )
50+ }
51+
52+ const safeContinueRoute = async (
53+ route : Route ,
54+ overrides ?: Parameters < Route [ 'continue' ] > [ 0 ] ,
55+ ) : Promise < void > => {
56+ try {
57+ await route . continue ( overrides )
58+ } catch ( error ) {
59+ if ( isRouteAlreadyHandledError ( error ) ) {
60+ return
61+ }
62+
63+ throw error
64+ }
65+ }
66+
67+ const safeFulfillRoute = async (
68+ route : Route ,
69+ overrides : Parameters < Route [ 'fulfill' ] > [ 0 ] ,
70+ ) : Promise < void > => {
71+ try {
72+ await route . fulfill ( overrides )
73+ } catch ( error ) {
74+ if ( isRouteAlreadyHandledError ( error ) ) {
75+ return
76+ }
77+
78+ throw error
79+ }
80+ }
81+
4882const withTimeout = async ( promise : Promise < void > , timeoutMs : number , timeoutMessage : string ) : Promise < void > => {
4983 let timeoutId : ReturnType < typeof setTimeout > | undefined
5084 const timeoutPromise = new Promise < void > ( ( _ , reject ) => {
@@ -130,13 +164,13 @@ const createFetchOverride = async (page: Page, options: OverrideOptions): Promis
130164 }
131165
132166 if ( options . mode === 'spy' ) {
133- await route . continue ( )
167+ await safeContinueRoute ( route )
134168 return
135169 }
136170
137171 if ( options . mode === 'delay' ) {
138172 await delay ( options . delayMs )
139- await route . continue ( )
173+ await safeContinueRoute ( route )
140174 return
141175 }
142176
@@ -145,7 +179,7 @@ const createFetchOverride = async (page: Page, options: OverrideOptions): Promis
145179 ...request . headers ( ) ,
146180 ...options . headers ,
147181 }
148- await route . continue ( { headers : mergedHeaders } )
182+ await safeContinueRoute ( route , { headers : mergedHeaders } )
149183 return
150184 }
151185
@@ -159,15 +193,15 @@ const createFetchOverride = async (page: Page, options: OverrideOptions): Promis
159193
160194 const body = typeof resolvedBody === 'string' ? resolvedBody : JSON . stringify ( resolvedBody )
161195
162- await route . fulfill ( {
196+ await safeFulfillRoute ( route , {
163197 status : options . status ?? 200 ,
164198 headers,
165199 body,
166200 } )
167201 return
168202 }
169203
170- await route . continue ( )
204+ await safeContinueRoute ( route )
171205 }
172206
173207 await page . route ( urlPattern , handler )
0 commit comments