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
native-testing-library 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.
Example
importReactfrom'react';import{Button,Text,TextInput,View}from'react-native';import{fireEvent,render,wait}from'@testing-library/react-native';functionExample(){const[name,setUser]=React.useState('');const[show,setShow]=React.useState(false);return(<View><TextInputvalue={name}onChangeText={setUser}testID="input"/><Buttontitle="Print Username"onPress={()=>{// 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&&<TexttestID="printed-username">{name}</Text>}</View>);}test('examples of some things',async()=>{const{ getByTestId, getByText, queryByTestId, baseElement }=render(<Example/>);constfamousWomanInHistory='Ada Lovelace';constinput=getByTestId('input');fireEvent.changeText(input,famousWomanInHistory);constbutton=getByText('Print Username');fireEvent.press(button);awaitwait(()=>expect(queryByTestId('printed-username')).toBeTruthy());expect(getByTestId('printed-username').props.children).toBe(famousWomanInHistory);expect(baseElement).toMatchSnapshot();});
Installation
This module should be installed in your project's devDependencies:
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:
If it relates to rendering components, it deals with native views rather than component
instances, nor should it encourage dealing with component instances.
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.
Utility implementations and APIs should be simple and flexible.
In summary, we believe in the principles of testing-library, 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.
Inspiration
Huge thanks to Kent C. Dodds for evangelizing this approach to testing. We could have never come up
with this library without him
请发表评论