From 712a99f0d09d615208686a095adc7080f4c66881 Mon Sep 17 00:00:00 2001 From: Matthieu Devlin Date: Fri, 28 Jul 2023 13:49:31 -0700 Subject: [PATCH] fix(integrations): capture exception if any arg to console method is an error --- packages/integrations/src/captureconsole.ts | 5 +++-- packages/integrations/test/captureconsole.test.ts | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/integrations/src/captureconsole.ts b/packages/integrations/src/captureconsole.ts index 980bc74dcad6..bca9e6a2e410 100644 --- a/packages/integrations/src/captureconsole.ts +++ b/packages/integrations/src/captureconsole.ts @@ -55,14 +55,15 @@ export class CaptureConsole implements Integration { }); let message = safeJoin(args, ' '); + const error = args.find(arg => arg instanceof Error); if (level === 'assert') { if (args[0] === false) { message = `Assertion failed: ${safeJoin(args.slice(1), ' ') || 'console.assert'}`; scope.setExtra('arguments', args.slice(1)); hub.captureMessage(message); } - } else if (level === 'error' && args[0] instanceof Error) { - hub.captureException(args[0]); + } else if (level === 'error' && error) { + hub.captureException(error); } else { hub.captureMessage(message); } diff --git a/packages/integrations/test/captureconsole.test.ts b/packages/integrations/test/captureconsole.test.ts index be766d5f6c8d..00e9f23c4564 100644 --- a/packages/integrations/test/captureconsole.test.ts +++ b/packages/integrations/test/captureconsole.test.ts @@ -243,6 +243,20 @@ describe('CaptureConsole setup', () => { expect(mockHub.captureException).toHaveBeenCalledWith(someError); }); + it('should capture exception when console logs an error object in any of the args when level set to "error"', () => { + const captureConsoleIntegration = new CaptureConsole({ levels: ['error'] }); + captureConsoleIntegration.setupOnce( + () => undefined, + () => getMockHubWithIntegration(captureConsoleIntegration), + ); + + const someError = new Error('some error'); + global.console.error('Something went wrong', someError); + + expect(mockHub.captureException).toHaveBeenCalledTimes(1); + expect(mockHub.captureException).toHaveBeenCalledWith(someError); + }); + it('should capture message on `console.log` when no levels are provided in constructor', () => { const captureConsoleIntegration = new CaptureConsole(); captureConsoleIntegration.setupOnce(