@@ -8,7 +8,6 @@ const Stream = require('stream');
8
8
const Code = require ( '@hapi/code' ) ;
9
9
const Handlebars = require ( 'handlebars' ) ;
10
10
const Hapi = require ( '..' ) ;
11
- const Hoek = require ( '@hapi/hoek' ) ;
12
11
const Inert = require ( '@hapi/inert' ) ;
13
12
const Lab = require ( '@hapi/lab' ) ;
14
13
const Vision = require ( '@hapi/vision' ) ;
@@ -1188,45 +1187,43 @@ describe('Response', () => {
1188
1187
server . route ( { method : 'GET' , path : '/stream' , handler : streamHandler } ) ;
1189
1188
server . route ( { method : 'GET' , path : '/writable' , handler : writableHandler } ) ;
1190
1189
1191
- let updates = 0 ;
1192
- server . events . on ( { name : 'request' , channels : 'error' } , ( request , event ) => {
1193
-
1194
- expect ( event . error ) . to . be . an . error ( 'Stream must have a readable interface' ) ;
1195
- ++ updates ;
1196
- } ) ;
1197
-
1198
1190
await server . initialize ( ) ;
1199
1191
1192
+ const log1 = server . events . once ( { name : 'request' , channels : 'error' } ) ;
1200
1193
const res1 = await server . inject ( '/stream' ) ;
1201
1194
expect ( res1 . statusCode ) . to . equal ( 500 ) ;
1202
1195
1196
+ const [ , event1 ] = await log1 ;
1197
+ expect ( event1 . error ) . to . be . an . error ( 'Stream must have a readable interface' ) ;
1198
+
1199
+ const log2 = server . events . once ( { name : 'request' , channels : 'error' } ) ;
1203
1200
const res2 = await server . inject ( '/writable' ) ;
1204
1201
expect ( res2 . statusCode ) . to . equal ( 500 ) ;
1205
1202
1206
- await Hoek . wait ( 10 ) ;
1207
-
1208
- expect ( updates ) . to . equal ( 2 ) ;
1203
+ const [ , event2 ] = await log2 ;
1204
+ expect ( event2 . error ) . to . be . an . error ( 'Stream must have a readable interface' ) ;
1209
1205
} ) ;
1210
1206
1211
1207
it ( 'errors on an http client stream response' , async ( ) => {
1212
1208
1213
- const handler = ( request , h ) => {
1214
-
1215
- return h . response ( 'just a string' ) ;
1216
- } ;
1217
-
1218
1209
const streamHandler = ( request , h ) => {
1219
1210
1220
- return h . response ( Http . get ( request . server . info + '/' ) ) ;
1211
+ const req = Http . get ( request . server . info . uri ) ;
1212
+ req . abort ( ) ;
1213
+ return h . response ( req ) ;
1221
1214
} ;
1222
1215
1223
1216
const server = Hapi . server ( { debug : false } ) ;
1224
- server . route ( { method : 'GET' , path : '/' , handler } ) ;
1225
1217
server . route ( { method : 'GET' , path : '/stream' , handler : streamHandler } ) ;
1226
1218
1219
+ const log = server . events . once ( { name : 'request' , channels : 'error' } ) ;
1220
+
1227
1221
await server . initialize ( ) ;
1228
1222
const res = await server . inject ( '/stream' ) ;
1229
1223
expect ( res . statusCode ) . to . equal ( 500 ) ;
1224
+
1225
+ const [ , event ] = await log ;
1226
+ expect ( event . error ) . to . be . an . error ( 'Stream must have a readable interface' ) ;
1230
1227
} ) ;
1231
1228
1232
1229
it ( 'errors on objectMode stream response' , async ( ) => {
@@ -1260,8 +1257,13 @@ describe('Response', () => {
1260
1257
const server = Hapi . server ( { debug : false } ) ;
1261
1258
server . route ( { method : 'GET' , path : '/' , handler } ) ;
1262
1259
1260
+ const log = server . events . once ( { name : 'request' , channels : 'error' } ) ;
1261
+
1263
1262
const res = await server . inject ( '/' ) ;
1264
1263
expect ( res . statusCode ) . to . equal ( 500 ) ;
1264
+
1265
+ const [ , event ] = await log ;
1266
+ expect ( event . error ) . to . be . an . error ( 'Cannot reply with stream in object mode' ) ;
1265
1267
} ) ;
1266
1268
} ) ;
1267
1269
0 commit comments