当前位置:首页 > 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"
  }
}

运行测试:

jest如何测试react

npm test

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

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

相关文章

react项目如何自动化测试

react项目如何自动化测试

自动化测试工具选择 React项目常用的自动化测试工具包括Jest、React Testing Library、Cypress等。Jest是Facebook开发的JavaScript测试框架,适合单元…

react h5网站如何真机测试

react h5网站如何真机测试

使用 Chrome 远程调试(Android) 确保手机和电脑在同一局域网,打开手机开发者选项中的 USB 调试 和 USB 安装。通过 USB 连接电脑,在 Chrome 浏览器地址栏输入 chro…

jquery测试

jquery测试

jQuery 测试方法 jQuery 测试通常涉及单元测试、功能测试和集成测试。以下是几种常见的测试方法和工具: 使用 QUnit 进行单元测试 QUnit 是 jQuery 官方推荐的单元测试框架…

java如何测试并发

java如何测试并发

测试Java并发的方法 使用JUnit和并发测试工具 在Java中测试并发代码可以通过JUnit结合并发测试工具来实现。JUnit 5提供了@RepeatedTest和@Execution注解,可以用…

如何编写java测试类

如何编写java测试类

编写Java测试类是确保代码质量的重要环节,通常使用JUnit框架。以下是具体方法和注意事项: 创建测试类 测试类通常与被测类同名,后缀加Test。例如被测类为Calculator,测试类命名为Ca…

java如何写测试类

java如何写测试类

如何编写Java测试类 在Java中,测试类通常使用JUnit框架编写。JUnit是一个广泛使用的单元测试框架,可以帮助开发者验证代码的正确性。 创建测试类的基本步骤 新建一个类,类名通常以Test…