R
react-native-testing
About react-native-testing
A learning skill for React Native developers covering testing from unit and component tests to E2E, including native-module mocking and CI/CD test pipelines.
Key features
- 01Jest configuration
- 02Component and hook testing
- 03Mock native modules and APIs
- 04E2E tests with Detox or Maestro
- 05Set up CI/CD test pipelines
Use cases
- 01Configure Jest for a React Native project
- 02Verify component interactions and hook behavior
- 03Mock native modules or APIs
- 04Test end-to-end user flows
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-react-native --skill react-native-testingAfter installing, type/react-native-testingin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
assets/config.yamlschema.jsonreferences/GUIDE.mdPATTERNS.mdscripts/validate.pyDetails
From the project READMEReact Native Testing Skill
Learn comprehensive testing strategies including unit tests, component tests, and E2E tests.
Prerequisites
- React Native basics
- Understanding of async/await
- Familiarity with testing concepts
Learning Objectives
After completing this skill, you will be able to:
- Configure Jest for React Native
- Write component tests with Testing Library
- Mock native modules and APIs
- Implement E2E tests with Detox/Maestro
- Set up CI/CD test pipelines
Topics Covered
1. Jest Setup
// jest.config.js
module.exports = {
preset: 'react-native',
setupFilesAfterEnv: ['@testing-library/jest-native/extend-expect'],
transformIgnorePatterns: [
'node_modules/(?!(react-native|@react-native)/)',
],
};
2. Component Testing
import { render, screen, fireEvent } from '@testing-library/react-native';
import { Button } from './Button';
describe('Button', () => {
it('calls onPress when pressed', () => {
const onPress = jest.fn();
render(<Button title="Click" onPress={onPress} />);
fireEvent.press(screen.getByText('Click'));
expect(onPress).toHaveBeenCalled();
});
});
3. Hook Testing
import { renderHook, act } from '@testing-library/react-native';
import { useCounter } from './useCounter';
describe('useCounter', () => {
it('increments count', () => {
const { result } = renderHook(() => useCounter());
act(() => result.current.increment());
expect(result.current.count).toBe(1);
});
});
4. Mocking
// Mock native module
jest.mock('@react-native-async-storage/async-storage', () => ({
setItem: jest.fn(),
getItem: jest.fn(),
}));
// Mock API
jest.mock('./api', () => ({
fetchUser: jest.fn().mockResolvedValue({ id: '1', name: 'Test' }),
}));
5. E2E with Detox
describe('Login', () => {
beforeAll(async () => {
await device.launchApp();
});
it('should login successfully', async () => {
await element(by.id('email')).typeText('[email protected]');
await element(by.id('password')).typeText('password');
await element(by.id('login-btn')).tap();
await expect(element(by.id('home'))).toBeVisible();
});
});
Quick Start Example
// ProductCard.test.tsx
import { render, screen, fireEvent } from '@testing-library/react-native';
import { ProductCard } from './ProductCard';
const mockProduct = {
id: '1',
title: 'Test Product',
price: 99.99,
};
describe('ProductCard', () => {
it('renders product info', () => {
render(<ProductCard {...mockProduct} onPress={jest.fn()} />);
expect(screen.getByText('Test Product')).toBeOnTheScreen();
expect(screen.getByText('$99.99')).toBeOnTheScreen();
});
it('handles press', () => {
const onPress = jest.fn();
render(<ProductCard {...mockProduct} onPress={onPress} />);
fireEvent.press(screen.getByRole('button'));
expect(onPress).toHaveBeenCalledWith('1');
});
});
Common Errors & Solutions
| Error | Cause | Solution |
|---|---|---|
| "Cannot find module" | Missing mock | Add jest.mock() |
| Async timeout | Missing await | Use waitFor() |
| Element not found | Wrong query | Check testID/role |
Validation Checklist
- Unit tests pass
- Component tests cover interactions
- E2E tests complete flows
- Coverage meets threshold (80%+)
Usage
Skill("react-native-testing")
Bonded Agent: 06-react-native-testing
Comments
Markdown supported