This repository was archived by the owner on Jul 30, 2020. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 44
This repository was archived by the owner on Jul 30, 2020. It is now read-only.
fireEvent.layout doesn't trigger onLayout for TouchableOpacity #142
Copy link
Copy link
Closed
Description
react-nativeorexpo: Exponative-testing-libraryversion: 5.0.3jest-preset:@testing-library/react-nativereact-nativeversion: Expo 38 / RN 0.62nodeversion: 14
Relevant code or config:
import { act, render, fireEvent, wait } from '@testing-library/react-native';
it('Passes with View', async () => {
const mockOnLayout = jest.fn();
function MyComponent() {
return (
<View onLayout={(e) => mockOnLayout(e)} testID='my-view'>
<View style={{ height: 200, width: 200}} />
</View>
)
}
const { getByTestId } = render(<MyComponent />);
const view = getByTestId('my-view');
act(() => {
fireEvent.layout(view, {
nativeEvent: {
layout: {
width: 300,
},
},
});
});
await wait(() => expect(mockOnLayout).toHaveBeenCalled());
});
it('Fails with TouchableOpacity', async () => {
const mockOnLayout = jest.fn();
function MyComponent() {
return (
<TouchableOpacity onLayout={(e) => mockOnLayout(e)} testID='my-view'>
<View style={{ height: 200, width: 200}} />
</TouchableOpacity>
)
}
const { getByTestId } = render(<MyComponent />);
const view = getByTestId('my-view');
act(() => {
fireEvent.layout(view, {
nativeEvent: {
layout: {
width: 300,
},
},
});
});
await wait(() => expect(mockOnLayout).toHaveBeenCalled());
});What you did:
Tried to test the onLayout functionality of a component that uses TouchableOpacity.
What happened:
Mocked onLayout handler was never called.
I had followed https://stackoverflow.com/questions/57961440/testing-onlayout-in-react-native/61774123#61774123 which suggested that it should work and on testing a View based component like in the example it worked, however on changing the View to TouchableOpacity it no longer worked.
Reproduction:
See attached test cases.
Problem description:
onLayout is a prop supported by TouchableOpacity so it'd be good to be able to verify that my component called it's onLayout handler that I pass to it when a layout event is triggered.
Metadata
Metadata
Assignees
Labels
No labels