Need help with native-testing-library?
Click the β€œchat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

519 Stars 44 Forks MIT License 193 Commits 0 Opened issues


🐳 Simple and complete React Native testing utilities that encourage good testing practices.

Services available


Need anything else?

Contributors list

⚠️ Deprecation notice ⚠️

This repository has been deprecated in favor of and the

npm package will from now on (since v7.0) will be sourced from there. Please consult the migration guide.

Native Testing Library


Simple and complete React Native testing utilities that encourage good testing practices.

Read The Docs | Edit the docs

Build Status Code Coverage version downloads MIT License

All Contributors PRs Welcome Code of Conduct Discord

Watch on GitHub Star on GitHub

Table of Contents

The problem

You want to write maintainable tests for your React Native application. You love Kent Dodds' testing library, and you want to be able to write maintainable tests for your React Native application. You don't want to use a library that renders components to a fake DOM, and you've had a hard time finding what you need to write tests using that philosophy in React Native.

This solution

is an implementation of the well-known testing-library API that works for React Native. The primary goal is to mimic the testing library API as closely as possible while still accounting for the differences in the platforms.


import React from 'react';
import { Button, Text, TextInput, View } from 'react-native';
import { fireEvent, render, wait } from '@testing-library/react-native';

function Example() { const [name, setUser] = React.useState(''); const [show, setShow] = React.useState(false);

return ( { // let's pretend this is making a server request, so it's async // (you'd want to mock this imaginary request in your unit tests)... setTimeout(() => { setShow(!show); }, Math.floor(Math.random() * 200)); }} /> {show && {name}} ); }

test('examples of some things', async () => { const { getByTestId, getByText, queryByTestId, baseElement } = render(); const famousWomanInHistory = 'Ada Lovelace';

const input = getByTestId('input'); fireEvent.changeText(input, famousWomanInHistory);

const button = getByText('Print Username');;

await wait(() => expect(queryByTestId('printed-username')).toBeTruthy());

expect(getByTestId('printed-username').props.children).toBe(famousWomanInHistory); expect(baseElement).toMatchSnapshot(); });


This module should be installed in your project's

npm install --save-dev @testing-library/react-native

You will need

installed as dependencies in order to run this project.


If you are interested in testing a custom hook, check out react-hooks-testing-library.

Other Solutions

Guiding principles

The more your tests resemble the way your software is used, the more confidence they can give you.

We try to only expose methods and utilities that encourage you to write tests that closely resemble how your apps are used.

Utilities are included in this project based on the following guiding principles:

  1. If it relates to rendering components, it deals with native views rather than component instances, nor should it encourage dealing with component instances.
  2. It should be generally useful for testing the application components in the way the user would use it. We are making some trade-offs here because we're using a computer and often a simulated environment, but in general, utilities should encourage tests that use the components the way they're intended to be used.
  3. Utility implementations and APIs should be simple and flexible.

In summary, we believe in the principles of

, and adhere to them as closely as possible. At the end of the day, what we want is for this library to be pretty light-weight, simple, and understandable.


Huge thanks to Kent C. Dodds for evangelizing this approach to testing. We could have never come up with this library without him πŸ™. Check out his awesome work and learn more about testing with confidence at (you won't regret purchasing it), and of course, use this library's big brother,

for your DOM applications as well!

The hook testing ability of this library is the same implementation as react-hooks-testing-library. The only reason it was included in this package is because we need you to import render from us, not the

, and that's an important blocker. Some day, maybe we'll try to allow use of that library with this one somehow.


Thanks goes to these wonderful people (emoji key):

Brandon Carroll

πŸ’» πŸ“– πŸš‡ ⚠️

Tommy Graves

πŸ€” 🚧 πŸ‘€

Kent C. Dodds


Piotr Szlachciak



πŸ› πŸ’»

Kevin Sullivan


Ely Alvarado


Lewis Barnes

πŸ’» πŸ’¬

James DiGioia




Mateusz MΔ™drek


Ismail Ghallou




Sophie Au



πŸ’» πŸ“–



Sibelius Seraphini


Alex Egan


Dave Olsen

πŸ’» ⚠️ πŸ“–

This project follows the all-contributors specification. Contributions of any kind welcome!


Read The Docs | Edit the docs

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.