Skip to content

Commit 37a5ca5

Browse files
authored
fix: display correct error frame when fireEvent fails (#184)
* feat: support 'disabled' prop * revert disabled handling
1 parent aa8b3ab commit 37a5ca5

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

src/__tests__/fireEvent.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ describe('fireEvent', () => {
6060
const { getByTestId } = render(<WithoutEventComponent />);
6161

6262
expect(() => fireEvent(getByTestId('text'), 'press')).toThrow(
63-
'No handler function found for event: press'
63+
'No handler function found for event: "press"'
6464
);
6565
});
6666

src/fireEvent.js

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22
import act from './act';
33
import { ErrorWithStack } from './helpers/errors';
44

5-
const findEventHandler = (element: ReactTestInstance, eventName: string) => {
5+
const findEventHandler = (
6+
element: ReactTestInstance,
7+
eventName: string,
8+
callsite?: any
9+
) => {
610
const eventHandler = toEventHandlerName(eventName);
711

812
if (typeof element.props[eventHandler] === 'function') {
@@ -14,20 +18,25 @@ const findEventHandler = (element: ReactTestInstance, eventName: string) => {
1418
// Do not bubble event to the root element
1519
if (element.parent === null || element.parent.parent === null) {
1620
throw new ErrorWithStack(
17-
`No handler function found for event: ${eventName}`,
18-
invokeEvent
21+
`No handler function found for event: "${eventName}"`,
22+
callsite || invokeEvent
1923
);
2024
}
2125

22-
return findEventHandler(element.parent, eventName);
26+
return findEventHandler(element.parent, eventName, callsite);
2327
};
2428

2529
const invokeEvent = (
2630
element: ReactTestInstance,
2731
eventName: string,
28-
data?: *
29-
): any => {
30-
const handler = findEventHandler(element, eventName);
32+
data?: any,
33+
callsite?: any
34+
) => {
35+
const handler = findEventHandler(element, eventName, callsite);
36+
37+
if (!handler) {
38+
return null;
39+
}
3140

3241
let returnValue;
3342

@@ -42,11 +51,11 @@ const toEventHandlerName = (eventName: string) =>
4251
`on${eventName.charAt(0).toUpperCase()}${eventName.slice(1)}`;
4352

4453
const pressHandler = (element: ReactTestInstance) =>
45-
invokeEvent(element, 'press');
54+
invokeEvent(element, 'press', undefined, pressHandler);
4655
const changeTextHandler = (element: ReactTestInstance, data?: *) =>
47-
invokeEvent(element, 'changeText', data);
56+
invokeEvent(element, 'changeText', data, changeTextHandler);
4857
const scrollHandler = (element: ReactTestInstance, data?: *) =>
49-
invokeEvent(element, 'scroll', data);
58+
invokeEvent(element, 'scroll', data, scrollHandler);
5059

5160
const fireEvent = invokeEvent;
5261

0 commit comments

Comments
 (0)