Snapshot testing helps you check if your app's screen or component looks the same as before. It catches unexpected changes easily.
Snapshot testing in React Native
import React from 'react'; import renderer from 'react-test-renderer'; import MyComponent from '../MyComponent'; test('renders correctly', () => { const tree = renderer.create(<MyComponent />).toJSON(); expect(tree).toMatchSnapshot(); });
Use renderer.create() to render the component in a test environment.
toMatchSnapshot() compares the rendered output to a saved snapshot file.
test('button snapshot', () => { const tree = renderer.create(<Button title="Click" />).toJSON(); expect(tree).toMatchSnapshot(); });
test('text input snapshot', () => { const tree = renderer.create(<TextInput placeholder="Name" />).toJSON(); expect(tree).toMatchSnapshot(); });
This test renders a simple Greeting component and saves its UI structure as a snapshot. Later runs compare the UI to this snapshot to detect changes.
import React from 'react'; import renderer from 'react-test-renderer'; import { Text, View } from 'react-native'; function Greeting() { return ( <View> <Text>Hello, friend!</Text> </View> ); } test('Greeting renders correctly', () => { const tree = renderer.create(<Greeting />).toJSON(); expect(tree).toMatchSnapshot(); });
Snapshots are saved as files in a __snapshots__ folder next to your test files.
If UI changes are expected, update snapshots by running tests with --updateSnapshot flag.
Keep snapshots small and focused on one component to avoid large, hard-to-read files.
Snapshot testing helps catch unexpected UI changes quickly.
It saves a rendered UI output and compares future renders to it.
Use it to keep your app's look consistent during development.
Practice
snapshot testing in React Native?Solution
Step 1: Understand snapshot testing goal
Snapshot testing saves the UI output to detect changes later.Step 2: Identify what snapshot testing checks
It compares future UI renders to saved snapshots to catch unexpected changes.Final Answer:
To detect unexpected changes in the UI output -> Option CQuick Check:
Snapshot testing = UI change detection [OK]
- Confusing snapshot testing with API or performance tests
- Thinking it tests user input validation
- Assuming it measures app speed
Solution
Step 1: Recall Jest snapshot syntax
Jest requires wrapping the rendered output in expect() and calling toMatchSnapshot().Step 2: Check each option's syntax
expect(render()).toMatchSnapshot(); correctly wraps render output in expect() and calls toMatchSnapshot(). Others miss expect() or use wrong matcher.Final Answer:
expect(render()).toMatchSnapshot(); -> Option BQuick Check:
Use expect(render()).toMatchSnapshot() [OK]
- Omitting expect() around render output
- Using incorrect matcher like toBeSnapshot()
- Passing component directly to expect() without render
const tree = render().toJSON(); expect(tree).toMatchSnapshot();
What will happen if the Button's title changes to "Press" in the next test run?
Solution
Step 1: Understand snapshot comparison
Snapshots save the UI output including props like title. Changing title changes output.Step 2: Effect of changing title on test
Since the new render differs from saved snapshot, Jest will fail the test to alert the change.Final Answer:
The test will fail because the snapshot does not match -> Option AQuick Check:
Changed UI props cause snapshot test failure [OK]
- Thinking snapshot ignores prop changes
- Expecting test to pass with changed UI
- Confusing snapshot failure with syntax errors
test('renders correctly', () => {
const tree = render();
expect(tree).toMatchSnapshot();
});But Jest throws an error:
expect(received).toMatchSnapshot is not a function. What is the likely cause?Solution
Step 1: Understand render output type
render() returns an object, not a JSON serializable tree. toMatchSnapshot() works on JSON.Step 2: Fix by calling toJSON()
Calling toJSON() converts render output to snapshot-friendly format, enabling toMatchSnapshot() usage.Final Answer:
You forgot to call .toJSON() on the render output -> Option DQuick Check:
Call render().toJSON() before expect() [OK]
- Skipping .toJSON() call on render output
- Trying to import toMatchSnapshot manually
- Using wrong matcher like toBeSnapshot()
Solution
Step 1: Recall Jest snapshot update command
The correct Jest flag to update snapshots is-uor--updateSnapshot.Step 2: Identify exact command
Among options, onlyjest -uis the correct short form. Others are invalid or misspelled.Final Answer:
jest -u -> Option AQuick Check:
Use jest -u to update snapshots [OK]
- Typing incorrect or misspelled flags
- Trying to update snapshots without flags
- Confusing updateSnapshot with updateSnapshots
Ready to prove it?
Pass the test and this pattern moves unknown
