File tree Expand file tree Collapse file tree 3 files changed +43
-2
lines changed Expand file tree Collapse file tree 3 files changed +43
-2
lines changed Original file line number Diff line number Diff line change @@ -366,7 +366,7 @@ extend(Raven.prototype, {
366
366
kwargs = utils . isPlainObject ( kwargs ) ? extend ( { } , kwargs ) : { } ;
367
367
}
368
368
369
- if ( ! ( err instanceof Error ) ) {
369
+ if ( ! utils . isError ( err ) ) {
370
370
if ( utils . isPlainObject ( err ) ) {
371
371
// This will allow us to group events based on top-level keys
372
372
// which is much better than creating new group when any key/value change
@@ -451,7 +451,7 @@ extend(Raven.prototype, {
451
451
var self = this ;
452
452
var wrapped = function ( ) {
453
453
var err = arguments [ 0 ] ;
454
- if ( err instanceof Error ) {
454
+ if ( utils . isError ( err ) ) {
455
455
self . captureException ( err , options ) ;
456
456
} else {
457
457
func . apply ( null , arguments ) ;
Original file line number Diff line number Diff line change @@ -31,6 +31,14 @@ function jsonSize(value) {
31
31
return utf8Length ( JSON . stringify ( value ) ) ;
32
32
}
33
33
34
+ function isError ( what ) {
35
+ return (
36
+ Object . prototype . toString . call ( what ) === '[object Error]' || what instanceof Error
37
+ ) ;
38
+ }
39
+
40
+ module . exports . isError = isError ;
41
+
34
42
function isPlainObject ( what ) {
35
43
return Object . prototype . toString . call ( what ) === '[object Object]' ;
36
44
}
Original file line number Diff line number Diff line change @@ -566,4 +566,37 @@ describe('raven.utils', function() {
566
566
raven . utils . serializeKeysForMessage ( 'foo' ) . should . eql ( 'foo' ) ;
567
567
} ) ;
568
568
} ) ;
569
+
570
+ describe ( 'isError' , function ( ) {
571
+ it ( 'should work as advertised' , function ( ) {
572
+ function RavenError ( message ) {
573
+ this . name = 'RavenError' ;
574
+ this . message = message ;
575
+ }
576
+ RavenError . prototype = new Error ( ) ;
577
+ RavenError . prototype . constructor = RavenError ;
578
+
579
+ raven . utils . isError ( new Error ( ) ) . should . be . true ;
580
+ raven . utils . isError ( new RavenError ( ) ) . should . be . true ;
581
+ raven . utils . isError ( { } ) . should . be . false ;
582
+ raven . utils . isError ( {
583
+ message : 'A fake error' ,
584
+ stack : 'no stack here'
585
+ } ) . should . be . false ;
586
+ raven . utils . isError ( '' ) . should . be . false ;
587
+ raven . utils . isError ( true ) . should . be . false ;
588
+ } ) ;
589
+
590
+ it ( 'should work with errors from different contexts, eg. vm module' , function ( done ) {
591
+ var vm = require ( 'vm' ) ;
592
+ var script = new vm . Script ( "throw new Error('this is the error')" ) ;
593
+
594
+ try {
595
+ script . runInNewContext ( ) ;
596
+ } catch ( e ) {
597
+ raven . utils . isError ( e ) . should . be . true ;
598
+ done ( ) ;
599
+ }
600
+ } ) ;
601
+ } ) ;
569
602
} ) ;
You can’t perform that action at this time.
0 commit comments