Component testing helps check if parts of your app work right by themselves. It finds mistakes early so your app stays strong.
Component testing in React Native
import { render } from '@testing-library/react-native'; import MyComponent from './MyComponent'; test('description of what to test', () => { const { getByText } = render(<MyComponent />); expect(getByText('Hello')).toBeTruthy(); });
Use render to create the component in a test environment.
Use queries like getByText to find elements inside the component.
import { render } from '@testing-library/react-native'; import Button from './Button'; test('button shows correct label', () => { const { getByText } = render(<Button label="Click me" />); expect(getByText('Click me')).toBeTruthy(); });
import { render } from '@testing-library/react-native'; import Greeting from './Greeting'; test('greeting shows user name', () => { const { getByText } = render(<Greeting name="Anna" />); expect(getByText('Hello, Anna!')).toBeTruthy(); });
This example shows a simple Welcome component that greets a user by name. The test checks if the greeting text appears correctly when the component is rendered with a user prop.
import React from 'react'; import { Text, View } from 'react-native'; export default function Welcome(props) { return ( <View> <Text>Welcome, {props.user}!</Text> </View> ); } // Test file import React from 'react'; import { render } from '@testing-library/react-native'; import Welcome from './Welcome'; test('Welcome component shows user name', () => { const { getByText } = render(<Welcome user="Sam" />); expect(getByText('Welcome, Sam!')).toBeTruthy(); });
Always test one thing at a time in your component tests.
Use descriptive test names to know what each test checks.
Component tests run fast and help catch UI bugs early.
Component testing checks small parts of your app alone.
It uses tools like @testing-library/react-native to render and check components.
Good tests help keep your app working well as it grows.
Practice
Solution
Step 1: Understand component testing scope
Component testing focuses on small parts, or components, of the app individually.Step 2: Compare options to purpose
Only To check small parts of the app work correctly on their own describes testing small parts alone, which matches component testing.Final Answer:
To check small parts of the app work correctly on their own -> Option DQuick Check:
Component testing = small parts tested alone [OK]
- Confusing component testing with full app testing
- Thinking it tests app installation or network
- Assuming it tests performance or load
Solution
Step 1: Recall correct import syntax for named exports
Named exports are imported with curly braces, like { render }.Step 2: Check each option
import { render } from '@testing-library/react-native'; uses correct named import syntax; others are incorrect or use wrong casing.Final Answer:
import { render } from '@testing-library/react-native'; -> Option AQuick Check:
Named import uses curly braces [OK]
- Using default import syntax for named exports
- Wrong casing in import names
- Using * as import incorrectly
import React from 'react';
import { render } from '@testing-library/react-native';
import { Text } from 'react-native';
function Greeting() {
return Hello, World!;
}
const { getByText } = render();
const element = getByText('Hello, World!');
console.log(element.props.children);Solution
Step 1: Understand render and getByText usage
The render function creates the component tree; getByText finds the Text with given string.Step 2: Check what element.props.children contains
The Text component's children is the string 'Hello, World!', so element.props.children is that string.Final Answer:
Hello, World! -> Option BQuick Check:
getByText finds text content correctly [OK]
- Assuming getByText returns undefined if found
- Confusing element props with state
- Expecting error when text exists
import { render } from '@testing-library/react-native';
const { getByText } = render();
const button = getByText('Submit');
button.onPress();Solution
Step 1: Understand what getByText returns
getByText returns a React Test Instance, not a real component with event handlers.Step 2: Check how to simulate press events
To simulate press, use fireEvent.press(button) from testing library, not call onPress() directly.Final Answer:
You cannot call onPress() directly on the element returned by getByText -> Option AQuick Check:
Use fireEvent.press, not direct onPress call [OK]
- Calling onPress() directly on test element
- Importing render from wrong package
- Misusing getByText argument type
isLoggedIn is true. Which test code correctly checks this behavior?Solution
Step 1: Understand difference between getByText and queryByText
getByText throws error if text not found; queryByText returns null if not found.Step 2: Check test logic for isLoggedIn false
When isLoggedIn is false, 'Logged In' text should not appear, so queryByText returns null.Final Answer:
const { queryByText } = render(<MyComponent isLoggedIn={false} />); expect(queryByText('Logged In')).toBeNull(); -> Option CQuick Check:
Use queryByText to check absence safely [OK]
- Using getByText when element may be missing (causes error)
- Mixing getByText and queryByText incorrectly
- Expecting getByText to return null
Ready to prove it?
Pass the test and this pattern moves unknown
