当前位置:首页 > React

jest如何测试react

2026-01-23 21:41:25React

使用 Jest 测试 React 组件

Jest 是 Facebook 推出的 JavaScript 测试框架,特别适合测试 React 应用。以下介绍如何使用 Jest 测试 React 组件。

安装依赖

确保项目中已安装 Jest 和相关依赖:

npm install --save-dev jest @testing-library/react @testing-library/jest-dom @testing-library/user-event

@testing-library/react 提供 React 组件的测试工具,@testing-library/jest-dom 扩展了 Jest 的 DOM 断言,@testing-library/user-event 用于模拟用户交互。

配置 Jest

package.json 中添加 Jest 配置:

{
  "jest": {
    "testEnvironment": "jsdom",
    "setupFilesAfterEnv": ["@testing-library/jest-dom/extend-expect"]
  }
}

testEnvironment 设置为 jsdom 以模拟浏览器环境,setupFilesAfterEnv 加载 jest-dom 的扩展断言。

编写测试文件

假设有一个简单的 Button 组件:

// Button.js
import React from 'react';

const Button = ({ onClick, children }) => {
  return <button onClick={onClick}>{children}</button>;
};

export default Button;

Button 组件编写测试:

// Button.test.js
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import Button from './Button';

test('renders button with children', () => {
  render(<Button>Click me</Button>);
  expect(screen.getByText('Click me')).toBeInTheDocument();
});

test('calls onClick prop when clicked', () => {
  const handleClick = jest.fn();
  render(<Button onClick={handleClick}>Click me</Button>);
  fireEvent.click(screen.getByText('Click me'));
  expect(handleClick).toHaveBeenCalledTimes(1);
});

测试异步组件

对于异步组件,使用 waitForasync/await

// AsyncComponent.test.js
import React from 'react';
import { render, screen, waitFor } from '@testing-library/react';
import AsyncComponent from './AsyncComponent';

test('displays data after fetching', async () => {
  render(<AsyncComponent />);
  await waitFor(() => {
    expect(screen.getByText('Loaded data')).toBeInTheDocument();
  });
});

快照测试

Jest 支持快照测试,用于捕获组件渲染结果:

// ButtonSnapshot.test.js
import React from 'react';
import { render } from '@testing-library/react';
import Button from './Button';

test('matches snapshot', () => {
  const { asFragment } = render(<Button>Click me</Button>);
  expect(asFragment()).toMatchSnapshot();
});

首次运行会生成快照文件,后续测试会比较当前渲染结果与快照是否一致。

模拟模块

使用 jest.mock 模拟外部模块:

// ApiComponent.test.js
import React from 'react';
import { render, screen } from '@testing-library/react';
import ApiComponent from './ApiComponent';

jest.mock('./api', () => ({
  fetchData: jest.fn().mockResolvedValue('Mocked data'),
}));

test('displays mocked data', async () => {
  render(<ApiComponent />);
  expect(await screen.findByText('Mocked data')).toBeInTheDocument();
});

运行测试

package.json 中添加测试脚本:

{
  "scripts": {
    "test": "jest"
  }
}

运行测试:

npm test

通过以上方法,可以全面测试 React 组件的渲染、交互、异步逻辑和模块依赖。

jest如何测试react

标签: 测试jest
分享给朋友:

相关文章

vue实现答题测试

vue实现答题测试

Vue实现答题测试的基本步骤 安装Vue.js环境,确保项目已配置好Vue 2或Vue 3的基础依赖。通过命令行工具初始化项目或直接通过CDN引入Vue库。 创建答题测试的Vue组件,定义题目数据…

java如何创建测试类

java如何创建测试类

创建测试类的基本步骤 在Java中创建测试类通常使用JUnit框架,以下是具体方法: 安装JUnit依赖 对于Maven项目,在pom.xml中添加依赖: <dependency>…

vue实现课堂发布测试

vue实现课堂发布测试

Vue实现课堂发布测试功能 项目结构设计 使用Vue CLI创建项目基础结构,核心目录包括: components/ 存放可复用组件 views/ 存放页面级组件 router/ 配置路由 stor…

react表单如何测试

react表单如何测试

测试 React 表单的方法 单元测试表单组件 使用 Jest 和 React Testing Library 测试表单组件的渲染和交互。验证输入框、按钮等元素是否存在,模拟用户输入并检查状态变化。…