mcpField
R
react-native-testing

react-native-testing

github.com/pluginagentmarketplaceTesting & quality10112 installsUpdated 43w ago
Repository

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

  1. 01Jest configuration
  2. 02Component and hook testing
  3. 03Mock native modules and APIs
  4. 04E2E tests with Detox or Maestro
  5. 05Set up CI/CD test pipelines

Use cases

  1. 01Configure Jest for a React Native project
  2. 02Verify component interactions and hook behavior
  3. 03Mock native modules or APIs
  4. 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-testing

After installing, type/react-native-testingin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

assets/
config.yaml
schema.json
references/
GUIDE.md
PATTERNS.md
scripts/
validate.py

Details

From the project README

React 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

ErrorCauseSolution
"Cannot find module"Missing mockAdd jest.mock()
Async timeoutMissing awaitUse waitFor()
Element not foundWrong queryCheck 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