mcpField
R
react-native-testing

react-native-testing

github.com/pluginagentmarketplace测试与质量10112 次安装43 周前更新
代码仓库

关于 react-native-testing

面向 React Native 开发者的测试学习技能,涵盖从单元与组件测试到端到端测试的策略,并包括原生模块模拟和 CI/CD 测试流水线设置。

主要功能

  1. 01Jest 配置
  2. 02组件与 Hook 测试
  3. 03模拟原生模块和 API
  4. 04使用 Detox 或 Maestro 做端到端测试
  5. 05设置 CI/CD 测试流水线

适用场景

  1. 01为 React Native 项目配置 Jest
  2. 02验证组件交互和 Hook 行为
  3. 03模拟原生模块或 API
  4. 04测试端到端用户流程

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-react-native --skill react-native-testing

安装后在 Claude Code 中输入/react-native-testing确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

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

详细介绍

React Native 测试技能

学习全面的测试策略,包括单元测试、组件测试和 E2E 测试。

前置条件

  • React Native 基础知识
  • 了解 async/await
  • 熟悉测试概念

学习目标

完成此技能后,你将能够:

  • 为 React Native 配置 Jest
  • 使用 Testing Library 编写组件测试
  • 模拟原生模块和 API
  • 使用 Detox/Maestro 实施 E2E 测试
  • 设置 CI/CD 测试流水线

涵盖主题

1. Jest 设置
// jest.config.js
module.exports = {
  preset: 'react-native',
  setupFilesAfterEnv: ['@testing-library/jest-native/extend-expect'],
  transformIgnorePatterns: [
    'node_modules/(?!(react-native|@react-native)/)',
  ],
};
2. 组件测试
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 测试
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. 模拟
// 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. 使用 Detox 进行 E2E 测试
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();
  });
});

快速入门示例

// 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');
  });
});

常见错误与解决方案

错误原因解决方案
"Cannot find module"缺少模拟添加 jest.mock()
异步超时缺少 await使用 waitFor()
未找到元素查询错误检查 testID/role

验证清单

  • 单元测试通过
  • 组件测试覆盖交互
  • E2E 测试完成完整流程
  • 覆盖率达到阈值(80%+)

使用方法

Skill("react-native-testing")

绑定的 Agent:06-react-native-testing

评论

支持 Markdown