@@ -231,3 +231,60 @@ test('forwards error event from the server to the client automatically', async (
231
231
232
232
await expect ( errorPromise ) . resolves . toBeUndefined ( )
233
233
} )
234
+
235
+ test ( 'forward custom stream errors from the original server to the client automatically' , async ( {
236
+ loadExample,
237
+ page,
238
+ } ) => {
239
+ await loadExample ( require . resolve ( './sse.mocks.ts' ) , {
240
+ skipActivation : true ,
241
+ } )
242
+
243
+ await using server = await createTestHttpServer ( {
244
+ defineRoutes ( routes ) {
245
+ routes . get ( '/stream' , ( ) => {
246
+ const stream = new ReadableStream ( {
247
+ start ( controller ) {
248
+ controller . error ( new Error ( 'Custom stream error' ) )
249
+ } ,
250
+ } )
251
+
252
+ return new Response ( stream , {
253
+ headers : {
254
+ 'access-control-allow-origin' : '*' ,
255
+ 'content-type' : 'text/event-stream' ,
256
+ 'cache-control' : 'no-cache' ,
257
+ connection : 'keep-alive' ,
258
+ } ,
259
+ } )
260
+ } )
261
+ } ,
262
+ } )
263
+ const url = server . http . url ( '/stream' ) . href
264
+
265
+ await page . evaluate ( async ( url ) => {
266
+ const { setupWorker, sse } = window . msw
267
+
268
+ const worker = setupWorker (
269
+ sse ( url , ( { server } ) => {
270
+ server . connect ( )
271
+ } ) ,
272
+ )
273
+ await worker . start ( )
274
+ } , url )
275
+
276
+ const errorPromise = page . evaluate ( ( url ) => {
277
+ return new Promise < void > ( ( resolve , reject ) => {
278
+ const source = new EventSource ( url )
279
+ source . onerror = ( error ) => {
280
+ console . log ( error )
281
+ resolve ( )
282
+ }
283
+ source . onmessage = ( ) => reject ( new Error ( 'Must not receive a message' ) )
284
+ } )
285
+ } , url )
286
+
287
+ await page . pause ( )
288
+
289
+ await expect ( errorPromise ) . resolves . toBeUndefined ( )
290
+ } )
0 commit comments