From 53e29253973349722f42f1e3b400b52442efcc54 Mon Sep 17 00:00:00 2001 From: Pontus Lundin Date: Mon, 1 Mar 2021 12:37:31 +0100 Subject: [PATCH 1/2] do not throw when event handler was not found --- src/__tests__/fireEvent.test.js | 10 ---------- src/fireEvent.js | 10 +--------- 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/src/__tests__/fireEvent.test.js b/src/__tests__/fireEvent.test.js index 90cb60e06..cf5016b2f 100644 --- a/src/__tests__/fireEvent.test.js +++ b/src/__tests__/fireEvent.test.js @@ -62,16 +62,6 @@ describe('fireEvent', () => { expect(onPressMock).toHaveBeenCalled(); }); - test('should throw an Error when event handler was not found', () => { - const { getByText } = render( - 'this is not passed to children'} /> - ); - - expect(() => fireEvent(getByText('Without event'), 'press')).toThrow( - 'No handler function found for event: "press"' - ); - }); - test('should invoke event with custom name', () => { const handlerMock = jest.fn(); const EVENT_DATA = 'event data'; diff --git a/src/fireEvent.js b/src/fireEvent.js index 18c938e7d..bcc6226f2 100644 --- a/src/fireEvent.js +++ b/src/fireEvent.js @@ -1,6 +1,5 @@ // @flow import act from './act'; -import { ErrorWithStack } from './helpers/errors'; const isHostElement = (element?: ReactTestInstance) => { return typeof element?.type === 'string'; @@ -66,14 +65,7 @@ const findEventHandler = ( // Do not bubble event to the root element const hasHandler = handler != null || hasDescendandHandler; if (element.parent === null || element.parent.parent === null) { - if (hasHandler) { - return null; - } else { - throw new ErrorWithStack( - `No handler function found for event: "${eventName}"`, - callsite || invokeEvent - ); - } + return null; } return findEventHandler( From 38f93eef3d29d977c5662600710f997d99814d5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Tue, 2 Mar 2021 14:58:57 +0100 Subject: [PATCH 2/2] remove unnecessary hasDescendandHandler --- src/__tests__/fireEvent.test.js | 10 ++++++++++ src/fireEvent.js | 13 ++----------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/__tests__/fireEvent.test.js b/src/__tests__/fireEvent.test.js index cf5016b2f..cd273dc1c 100644 --- a/src/__tests__/fireEvent.test.js +++ b/src/__tests__/fireEvent.test.js @@ -62,6 +62,16 @@ describe('fireEvent', () => { expect(onPressMock).toHaveBeenCalled(); }); + test('should not fire if the press handler is not passed to children', () => { + const onPressMock = jest.fn(); + const { getByText } = render( + // TODO: this functionality is buggy, i.e. it will fail if we wrap this component with a View. + + ); + fireEvent(getByText('Without event'), 'press'); + expect(onPressMock).not.toHaveBeenCalled(); + }); + test('should invoke event with custom name', () => { const handlerMock = jest.fn(); const EVENT_DATA = 'event data'; diff --git a/src/fireEvent.js b/src/fireEvent.js index bcc6226f2..ffb6df173 100644 --- a/src/fireEvent.js +++ b/src/fireEvent.js @@ -52,8 +52,7 @@ const findEventHandler = ( element: ReactTestInstance, eventName: string, callsite?: any, - nearestTouchResponder?: ReactTestInstance, - hasDescendandHandler?: boolean + nearestTouchResponder?: ReactTestInstance ) => { const touchResponder = isTouchResponder(element) ? element @@ -62,19 +61,11 @@ const findEventHandler = ( const handler = getEventHandler(element, eventName); if (handler && isEventEnabled(element, touchResponder)) return handler; - // Do not bubble event to the root element - const hasHandler = handler != null || hasDescendandHandler; if (element.parent === null || element.parent.parent === null) { return null; } - return findEventHandler( - element.parent, - eventName, - callsite, - touchResponder, - hasHandler - ); + return findEventHandler(element.parent, eventName, callsite, touchResponder); }; const getEventHandler = (element: ReactTestInstance, eventName: string) => {