@@ -13,7 +13,7 @@ const path = require('path')
1313const tape = require ( 'tape' )
1414
1515const logging = require ( '../lib/logging' )
16- const { createAPMError, generateErrorId, _moduleNameFromFrames } = require ( '../lib/errors' )
16+ const { createAPMError, generateErrorId, attributesFromErr , _moduleNameFromFrames } = require ( '../lib/errors' )
1717const { dottedLookup } = require ( './_utils' )
1818
1919const log = logging . createLogger ( 'off' )
@@ -331,3 +331,43 @@ tape.test('#_moduleNameFromFrames()', function (suite) {
331331
332332 suite . end ( )
333333} )
334+
335+ tape . test ( '#attributesFromErr()' , function ( suite ) {
336+ var cases = [
337+ // 'err' is an Error instance, or a function that returns one.
338+ {
339+ name : 'no attrs' ,
340+ err : new Error ( 'boom' ) ,
341+ expectedAttrs : undefined
342+ } ,
343+ {
344+ name : 'string attr' ,
345+ err : ( ) => {
346+ const err = new Error ( 'boom' )
347+ err . aStr = 'hello'
348+ return err
349+ } ,
350+ expectedAttrs : { aStr : 'hello' }
351+ } ,
352+ {
353+ name : 'Invalid Date attr' ,
354+ err : ( ) => {
355+ const err = new Error ( 'boom' )
356+ err . aDate = new Date ( 'invalid' )
357+ return err
358+ } ,
359+ expectedAttrs : { aDate : 'Invalid Date' }
360+ }
361+ ]
362+
363+ cases . forEach ( function ( opts ) {
364+ suite . test ( opts . name , function ( t ) {
365+ const err = typeof ( opts . err ) === 'function' ? opts . err ( ) : opts . err
366+ const attrs = attributesFromErr ( err )
367+ t . deepEqual ( attrs , opts . expectedAttrs , 'got expected attrs' )
368+ t . end ( )
369+ } )
370+ } )
371+
372+ suite . end ( )
373+ } )
0 commit comments