fix: display correct error frame when fireEvent fails (#184)

* feat: support 'disabled' prop

* revert disabled handling
This commit is contained in:
Michał Pierzchała
2019-05-30 12:21:35 +02:00
committed by GitHub
parent aa8b3abe7f
commit 37a5ca573f
2 changed files with 20 additions and 11 deletions
+1 -1
View File
@@ -60,7 +60,7 @@ describe('fireEvent', () => {
const { getByTestId } = render(<WithoutEventComponent />);
expect(() => fireEvent(getByTestId('text'), 'press')).toThrow(
'No handler function found for event: press'
'No handler function found for event: "press"'
);
});
+19 -10
View File
@@ -2,7 +2,11 @@
import act from './act';
import { ErrorWithStack } from './helpers/errors';
const findEventHandler = (element: ReactTestInstance, eventName: string) => {
const findEventHandler = (
element: ReactTestInstance,
eventName: string,
callsite?: any
) => {
const eventHandler = toEventHandlerName(eventName);
if (typeof element.props[eventHandler] === 'function') {
@@ -14,20 +18,25 @@ const findEventHandler = (element: ReactTestInstance, eventName: string) => {
// Do not bubble event to the root element
if (element.parent === null || element.parent.parent === null) {
throw new ErrorWithStack(
`No handler function found for event: ${eventName}`,
invokeEvent
`No handler function found for event: "${eventName}"`,
callsite || invokeEvent
);
}
return findEventHandler(element.parent, eventName);
return findEventHandler(element.parent, eventName, callsite);
};
const invokeEvent = (
element: ReactTestInstance,
eventName: string,
data?: *
): any => {
const handler = findEventHandler(element, eventName);
data?: any,
callsite?: any
) => {
const handler = findEventHandler(element, eventName, callsite);
if (!handler) {
return null;
}
let returnValue;
@@ -42,11 +51,11 @@ const toEventHandlerName = (eventName: string) =>
`on${eventName.charAt(0).toUpperCase()}${eventName.slice(1)}`;
const pressHandler = (element: ReactTestInstance) =>
invokeEvent(element, 'press');
invokeEvent(element, 'press', undefined, pressHandler);
const changeTextHandler = (element: ReactTestInstance, data?: *) =>
invokeEvent(element, 'changeText', data);
invokeEvent(element, 'changeText', data, changeTextHandler);
const scrollHandler = (element: ReactTestInstance, data?: *) =>
invokeEvent(element, 'scroll', data);
invokeEvent(element, 'scroll', data, scrollHandler);
const fireEvent = invokeEvent;