mirror of
https://github.com/callstack/react-native-testing-library.git
synced 2026-09-18 23:09:04 +08:00
feat: support multiple params in event handlers (#203)
This commit is contained in:
committed by
Michał Pierzchała
parent
db485a4740
commit
31f476bb7c
@@ -148,3 +148,15 @@ test('custom component with custom event name', () => {
|
||||
|
||||
expect(handlePress).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('event with multiple handler parameters', () => {
|
||||
const handlePress = jest.fn();
|
||||
|
||||
const { getByTestId } = render(
|
||||
<CustomEventComponentWithCustomName handlePress={handlePress} />
|
||||
);
|
||||
|
||||
fireEvent(getByTestId('my-custom-button'), 'handlePress', 'param1', 'param2');
|
||||
|
||||
expect(handlePress).toHaveBeenCalledWith('param1', 'param2');
|
||||
});
|
||||
|
||||
+13
-9
@@ -29,8 +29,8 @@ const findEventHandler = (
|
||||
const invokeEvent = (
|
||||
element: ReactTestInstance,
|
||||
eventName: string,
|
||||
data?: any,
|
||||
callsite?: any
|
||||
callsite?: any,
|
||||
...data: Array<any>
|
||||
) => {
|
||||
const handler = findEventHandler(element, eventName, callsite);
|
||||
|
||||
@@ -41,7 +41,7 @@ const invokeEvent = (
|
||||
let returnValue;
|
||||
|
||||
act(() => {
|
||||
returnValue = handler(data);
|
||||
returnValue = handler(...data);
|
||||
});
|
||||
|
||||
return returnValue;
|
||||
@@ -51,13 +51,17 @@ const toEventHandlerName = (eventName: string) =>
|
||||
`on${eventName.charAt(0).toUpperCase()}${eventName.slice(1)}`;
|
||||
|
||||
const pressHandler = (element: ReactTestInstance) =>
|
||||
invokeEvent(element, 'press', undefined, pressHandler);
|
||||
const changeTextHandler = (element: ReactTestInstance, data?: *) =>
|
||||
invokeEvent(element, 'changeText', data, changeTextHandler);
|
||||
const scrollHandler = (element: ReactTestInstance, data?: *) =>
|
||||
invokeEvent(element, 'scroll', data, scrollHandler);
|
||||
invokeEvent(element, 'press', pressHandler);
|
||||
const changeTextHandler = (element: ReactTestInstance, ...data: Array<any>) =>
|
||||
invokeEvent(element, 'changeText', changeTextHandler, ...data);
|
||||
const scrollHandler = (element: ReactTestInstance, ...data: Array<any>) =>
|
||||
invokeEvent(element, 'scroll', scrollHandler, ...data);
|
||||
|
||||
const fireEvent = invokeEvent;
|
||||
const fireEvent = (
|
||||
element: ReactTestInstance,
|
||||
eventName: string,
|
||||
...data: Array<any>
|
||||
) => invokeEvent(element, eventName, fireEvent, ...data);
|
||||
|
||||
fireEvent.press = pressHandler;
|
||||
fireEvent.changeText = changeTextHandler;
|
||||
|
||||
Reference in New Issue
Block a user