mirror of
https://github.com/callstack/react-native-testing-library.git
synced 2026-09-18 23:09:04 +08:00
RNTL v14: Make render(), act(), renderHook(), and fireEvent() calls async
This codemod migrates your test files from React Native Testing Library v13 to v14 by automatically transforming synchronous function calls to async versions and making test functions async when needed.
What it does
- Transforms
render(),act(),renderHook(), andfireEvent()calls toawait render(),await act(), etc. - Makes test functions (
test(),it(), hooks) async when needed - Handles
fireEvent.press(),fireEvent.changeText(),fireEvent.scroll(),screen.rerender(),screen.unmount(), and renderer methods - Only transforms calls imported from
@testing-library/react-native
Usage
# Run the codemod
npx codemod@latest run rntl-v14-async-functions --target ./path/to/your/tests
Custom render functions
If you have custom render helper functions (like renderWithProviders, renderWithTheme), specify them so they get transformed too:
npx codemod@latest run rntl-v14-async-functions --target ./path/to/your/tests --param customRenderFunctions="renderWithProviders,renderWithTheme"
Example
Before:
test('renders component', () => {
render(<MyComponent />);
expect(screen.getByText('Hello')).toBeOnTheScreen();
});
After:
test('renders component', async () => {
await render(<MyComponent />);
expect(screen.getByText('Hello')).toBeOnTheScreen();
});
Limitations
- Helper functions are not transformed by default (use
customRenderFunctionsparam if needed) - Namespace imports (
import * as RNTL) are not handled
Next steps
- Run the codemod on your test files
- Review the changes
- Manually update any remaining helper functions if needed
- Update your RNTL version to v14 (
rntl-v14-update-depscodemod) - Run your tests to verify everything works