diff --git a/src/plugins/home/public/services/welcome/welcome_service.test.ts b/src/plugins/home/public/services/welcome/welcome_service.test.ts index 2b1f74b18b5343..df2f95718c78b5 100644 --- a/src/plugins/home/public/services/welcome/welcome_service.test.ts +++ b/src/plugins/home/public/services/welcome/welcome_service.test.ts @@ -25,6 +25,16 @@ describe('WelcomeService', () => { expect(onRendered).toHaveBeenCalledTimes(1); }); + test('it should handle onRendered errors', () => { + const onRendered = jest.fn().mockImplementation(() => { + throw new Error('Something went terribly wrong'); + }); + welcomeServiceSetup.registerOnRendered(onRendered); + + expect(() => welcomeService.onRendered()).not.toThrow(); + expect(onRendered).toHaveBeenCalledTimes(1); + }); + test('it should allow registering multiple onRendered listeners', () => { const onRendered = jest.fn(); const onRendered2 = jest.fn(); @@ -63,5 +73,14 @@ describe('WelcomeService', () => { expect(welcomeService.renderTelemetryNotice()).toEqual('rendered text'); }); + + test('it should handle errors in the renderer', () => { + const renderer = jest.fn().mockImplementation(() => { + throw new Error('Something went terribly wrong'); + }); + welcomeServiceSetup.registerTelemetryNoticeRenderer(renderer); + + expect(welcomeService.renderTelemetryNotice()).toEqual(null); + }); }); }); diff --git a/src/plugins/home/public/services/welcome/welcome_service.ts b/src/plugins/home/public/services/welcome/welcome_service.ts index d07e05f4b0af29..46cf139adb36a3 100644 --- a/src/plugins/home/public/services/welcome/welcome_service.ts +++ b/src/plugins/home/public/services/welcome/welcome_service.ts @@ -39,14 +39,25 @@ export class WelcomeService { }; public onRendered = () => { - this.onRenderedHandlers.forEach((onRendered) => onRendered()); + this.onRenderedHandlers.forEach((onRendered) => { + try { + onRendered(); + } catch (err) { + // eslint-disable-next-line no-console + console.error(err); + } + }); }; public renderTelemetryNotice = () => { if (this.renderTelemetryNoticeHandler) { - return this.renderTelemetryNoticeHandler(); - } else { - return null; + try { + return this.renderTelemetryNoticeHandler(); + } catch (err) { + // eslint-disable-next-line no-console + console.error(err); + } } + return null; }; }