@@ -409,6 +409,106 @@ describe('Request', function () {
409
409
done ( ) ;
410
410
} ) ;
411
411
} ) ;
412
+
413
+ it ( 'emits request-error once' , function ( done ) {
414
+
415
+ var server = new Hapi . Server ( { debug : false } ) ;
416
+ server . connection ( ) ;
417
+
418
+ var errs = 0 ;
419
+ var req = null ;
420
+ server . on ( 'request-error' , function ( request , err ) {
421
+
422
+ errs ++ ;
423
+ expect ( err ) . to . exist ( ) ;
424
+ expect ( err . message ) . to . equal ( 'boom2' ) ;
425
+ req = request ;
426
+ } ) ;
427
+
428
+ server . ext ( 'onPreResponse' , function ( request , reply ) {
429
+
430
+ return reply ( new Error ( 'boom2' ) ) ;
431
+ } ) ;
432
+
433
+ server . route ( { method : 'GET' , path : '/' , handler : function ( request , reply ) { return reply ( new Error ( 'boom1' ) ) ; } } ) ;
434
+
435
+ server . inject ( '/' , function ( res ) {
436
+
437
+ expect ( res . statusCode ) . to . equal ( 500 ) ;
438
+ expect ( res . result ) . to . exist ( ) ;
439
+ expect ( res . result . message ) . to . equal ( 'An internal server error occurred' ) ;
440
+ } ) ;
441
+
442
+ server . once ( 'response' , function ( ) {
443
+
444
+ expect ( errs ) . to . equal ( 1 ) ;
445
+ expect ( req . getLog ( 'error' ) [ 1 ] . tags ) . to . deep . equal ( [ 'internal' , 'error' ] ) ;
446
+ done ( ) ;
447
+ } ) ;
448
+ } ) ;
449
+
450
+ it ( 'emits request-error on implementation error' , function ( done ) {
451
+
452
+ var server = new Hapi . Server ( { debug : false } ) ;
453
+ server . connection ( ) ;
454
+
455
+ var errs = 0 ;
456
+ var req = null ;
457
+ server . on ( 'request-error' , function ( request , err ) {
458
+
459
+ errs ++ ;
460
+ expect ( err ) . to . exist ( ) ;
461
+ expect ( err . message ) . to . equal ( 'Uncaught error: boom' ) ;
462
+ req = request ;
463
+ } ) ;
464
+
465
+ server . route ( { method : 'GET' , path : '/' , handler : function ( request , reply ) { throw new Error ( 'boom' ) ; } } ) ;
466
+
467
+ server . inject ( '/' , function ( res ) {
468
+
469
+ expect ( res . statusCode ) . to . equal ( 500 ) ;
470
+ expect ( res . result ) . to . exist ( ) ;
471
+ expect ( res . result . message ) . to . equal ( 'An internal server error occurred' ) ;
472
+ } ) ;
473
+
474
+ server . once ( 'response' , function ( ) {
475
+
476
+ expect ( errs ) . to . equal ( 1 ) ;
477
+ expect ( req . getLog ( 'error' ) [ 0 ] . tags ) . to . deep . equal ( [ 'internal' , 'implementation' , 'error' ] ) ;
478
+ done ( ) ;
479
+ } ) ;
480
+ } ) ;
481
+
482
+ it ( 'does not emit request-error when error is replaced with valid response' , function ( done ) {
483
+
484
+ var server = new Hapi . Server ( { debug : false } ) ;
485
+ server . connection ( ) ;
486
+
487
+ var errs = 0 ;
488
+ server . on ( 'request-error' , function ( request , err ) {
489
+
490
+ errs ++ ;
491
+ } ) ;
492
+
493
+ server . ext ( 'onPreResponse' , function ( request , reply ) {
494
+
495
+ return reply ( 'ok' ) ;
496
+ } ) ;
497
+
498
+ server . route ( { method : 'GET' , path : '/' , handler : function ( request , reply ) { return reply ( new Error ( 'boom1' ) ) ; } } ) ;
499
+
500
+ server . inject ( '/' , function ( res ) {
501
+
502
+ expect ( res . statusCode ) . to . equal ( 200 ) ;
503
+ expect ( res . result ) . to . equal ( 'ok' ) ;
504
+ } ) ;
505
+
506
+ server . once ( 'response' , function ( ) {
507
+
508
+ expect ( errs ) . to . equal ( 0 ) ;
509
+ done ( ) ;
510
+ } ) ;
511
+ } ) ;
412
512
} ) ;
413
513
414
514
describe ( 'tail()' , function ( ) {
@@ -732,6 +832,34 @@ describe('Request', function () {
732
832
} ) ;
733
833
} ) ;
734
834
835
+ it ( 'outputs log to debug console with error data' , function ( done ) {
836
+
837
+ var handler = function ( request , reply ) {
838
+
839
+ request . log ( [ 'implementation' ] , new Error ( 'boom' ) ) ;
840
+ return reply ( ) ;
841
+ } ;
842
+
843
+ var server = new Hapi . Server ( ) ;
844
+ server . connection ( ) ;
845
+ server . route ( { method : 'GET' , path : '/' , handler : handler } ) ;
846
+
847
+ var orig = console . error ;
848
+ console . error = function ( ) {
849
+
850
+ expect ( arguments [ 0 ] ) . to . equal ( 'Debug:' ) ;
851
+ expect ( arguments [ 1 ] ) . to . equal ( 'implementation' ) ;
852
+ expect ( arguments [ 2 ] ) . to . contain ( 'Error: boom' ) ;
853
+ console . error = orig ;
854
+ done ( ) ;
855
+ } ;
856
+
857
+ server . inject ( '/' , function ( res ) {
858
+
859
+ expect ( res . statusCode ) . to . equal ( 200 ) ;
860
+ } ) ;
861
+ } ) ;
862
+
735
863
it ( 'handles invalid log data object stringify' , function ( done ) {
736
864
737
865
var handler = function ( request , reply ) {
@@ -978,33 +1106,6 @@ describe('Request', function () {
978
1106
done ( ) ;
979
1107
} ) ;
980
1108
} ) ;
981
-
982
- it ( 'emits request-error when view file for handler not found' , function ( done ) {
983
-
984
- var server = new Hapi . Server ( { debug : false } ) ;
985
- server . connection ( ) ;
986
-
987
- server . views ( {
988
- engines : { 'html' : Handlebars } ,
989
- path : __dirname
990
- } ) ;
991
-
992
- server . once ( 'request-error' , function ( request , err ) {
993
-
994
- expect ( err ) . to . exist ( ) ;
995
- expect ( err . message ) . to . contain ( 'View file not found' ) ;
996
- done ( ) ;
997
- } ) ;
998
-
999
- server . route ( { method : 'GET' , path : '/{param}' , handler : { view : 'noview' } } ) ;
1000
-
1001
- server . inject ( '/hello' , function ( res ) {
1002
-
1003
- expect ( res . statusCode ) . to . equal ( 500 ) ;
1004
- expect ( res . result ) . to . exist ( ) ;
1005
- expect ( res . result . message ) . to . equal ( 'An internal server error occurred' ) ;
1006
- } ) ;
1007
- } ) ;
1008
1109
} ) ;
1009
1110
1010
1111
describe ( 'timeout' , { parallel : false } , function ( ) {
0 commit comments