React Native Testing Library

React Native Testing Library 3,421 (https://github.com/callstack/react-native-testing-library 3,421 ) (RNTL, MIT, by Callstack) follows the Testing Library 221,825 rule: the more a test resembles the way the app is used, the more confidence it gives. You find elements by what a user perceives (text, role, label) and act on them as a user would. Version 14.0.1, current since June 2026, renders through Test Renderer (https://github.com/mdjastrzebski/test-renderer 23 ) instead of React 7,897 's deprecated react-test-renderer (install the line matching your React minor version, 1.2 for React 19.2), and makes render, renderHook, fireEvent and act async, following React 19, so every call is awaited:

__tests__/BookRow.test.tsx (pressing the row)JSX
test('a press reports the book id', async () => {
  const onPress = jest.fn();
  const user = userEvent.setup();
  await render(<BookRow book={salt} onPress={onPress} />);
  await user.press(screen.getByText('Salt and Saffron'));
  expect(onPress).toHaveBeenCalledTimes(1);
  expect(onPress).toHaveBeenCalledWith(3);
});

userEvent.press() reproduces the event sequence React Native 36,878 emits (pressIn, pressOut, then press, at least 130 ms), and the press on the title reaches the Pressable around the row. fireEvent.press() only calls the onPress prop, so it would also "press" an element that an overlay makes untappable; keep it for events users cannot produce directly, such as onEndReached. Matchers such as toBeOnTheScreen() come with the library; @testing-library/jest-native is no longer needed.