@@ -459,18 +459,33 @@ describe('markFunctionWrapped', () => {
459459
460460describe ( 'wrapMethod' , ( ) => {
461461 it ( 'can wrap a method on an object and unwrap it later' , ( ) => {
462- const wrapped = ( ) => { } ;
463- const original = ( ) => { } ;
464- const obj = { m : original } ;
465- wrapMethod ( obj , 'm' , wrapped ) ;
466- expect ( obj . m ) . toBe ( wrapped ) ;
467- expect ( ( obj . m as WrappedFunction ) . __sentry_original__ ) . toBe ( original ) ;
462+ const wrappedEnumerable = ( ) => { } ;
463+ const originalEnumerable = ( ) => { } ;
464+ const wrappedNotEnumerable = ( ) => { } ;
465+ const originalNotEnumerable = ( ) => { } ;
466+ const obj : Record < string , unknown > = {
467+ enumerable : originalEnumerable ,
468+ } ;
469+ Object . defineProperty ( obj , 'notEnumerable' , {
470+ writable : true ,
471+ configurable : true ,
472+ enumerable : false ,
473+ value : originalNotEnumerable ,
474+ } ) ;
475+ wrapMethod ( obj , 'notEnumerable' , wrappedNotEnumerable , false ) ;
476+ wrapMethod ( obj , 'enumerable' , wrappedEnumerable ) ;
477+ // does not change enumerability
478+ expect ( Object . keys ( obj ) ) . toStrictEqual ( [ 'enumerable' ] ) ;
479+ expect ( obj . notEnumerable ) . toBe ( wrappedNotEnumerable ) ;
480+ expect ( ( obj . notEnumerable as WrappedFunction ) . __sentry_original__ ) . toBe ( originalNotEnumerable ) ;
481+ expect ( obj . enumerable ) . toBe ( wrappedEnumerable ) ;
482+ expect ( ( obj . enumerable as WrappedFunction ) . __sentry_original__ ) . toBe ( originalEnumerable ) ;
468483 } ) ;
469484
470485 it ( 'throws if misused' , ( ) => {
471486 const wrapped = ( ) => { } ;
472487 const original = ( ) => { } ;
473- const obj = { m : original } ;
488+ const obj = { get m ( ) { return original } } ;
474489 wrapMethod ( obj , 'm' , wrapped ) ;
475490 expect ( ( ) => {
476491 //@ts -expect-error verify type checking prevents this mistake
0 commit comments