前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >React 设计模式 0x8:测试

React 设计模式 0x8:测试

作者头像
Cellinlab
发布2023-05-17 21:08:46
1.8K0
发布2023-05-17 21:08:46
举报
文章被收录于专栏:Cellinlab's Blog

学习如何轻松构建可伸缩的 React 应用程序:测试

# 如何测试组件

测试在每个 Web 应用程序中都非常重要,即使在 React 中也是如此,特别是在其组件方面。

有两种方法可以实现这一点,包括以下内容:

  • 功能测试
  • 渲染测试

# 功能测试

功能测试是一种测试,用于验证函数按预期工作,这个测试通常根据被测试的函数的预期结果进行断言。

# 渲染测试

渲染测试是一种测试,用于验证您的组件是否正确渲染。

# 使用 Jest 进行功能测试

Jest 是测试 React 应用程序时非常流行的测试库。 Jest 通常用于运行功能测试,但我们也可以用它进行渲染测试。

初始化测试项目:

代码语言:javascript
复制
npx create-react-app testing-with-jest

cd testing-with-jest

npm install --save-dev jest

测试文件一般以 .test.js.spec.js 结尾。在 src 目录下创建一个名为 sum.test.js 的文件,然后将以下内容添加到该文件中:

代码语言:javascript
复制
function sum(a, b) {
  return a + b;
}

test("adds 1 + 2 to equal 3", () => {
  expect(sum(1, 2)).toBe(3);
});

运行测试:

代码语言:javascript
复制
npm test

# React Testing Library

React Testing Library 基于 DOM Testing Library 添加了用于处理 React 组件的 API。该库实际上通过 data-tested 查找节点中的元素以进行测试。还可以使用此库来模拟 API 并验证它们的真实性。

更多信息,请访问 https://testing-library.com/docs/react-testing-library/intro (opens new window)

# 如何进行回归测试

回归测试是确保在进行更改之前测试过的所有内容仍然完好无损的测试方法。当应用程序中发生更改时,应用程序中的某些内容很可能会出现故障。回归测试的目的在于确保一切仍然像以前一样正常工作。

可以使用 Jest 中的快照测试来实现这种回归测试。

安装依赖:

代码语言:javascript
复制
npm install --save-dev react-test-renderer

通过简单小例子来演示:

代码语言:javascript
复制
import renderer from "react-test-renderer";

it("renders correctly", () => {
  const tree = renderer.create(<label htmlFor="search">Search:</label>).toJSON();
  expect(tree).toMatchSnapshot();
});

当应用程序中发生更改时,快照测试将捕获更改并将其与先前的快照进行比较。如果快照不匹配,则测试将失败。

# 使用 Cypress 进行端到端(e2e)测试

当涉及端到端测试时,Cypress 在其他框架/库中处于领先地位。

要使用 Cypress,请在 React 应用程序中运行以下命令:

代码语言:javascript
复制
npm install --save-dev cypress
npx cypress open

完成后,请将以下代码添加到 package.json 文件中的 scripts 部分下:

代码语言:javascript
复制
{
  "e2e-test": "cypress open."
}

然后在终端中运行 npm run e2e-test 并等待。

这将打开一个新窗口,显示您可以使用的一些预配置测试。

要了解有关 Cypress 的更多信息,可以访问 React Quickstart (opens new window)

# 使用 Jest 进行集成测试

在大多数 React 应用程序中,通常需要与外部 API 集成以在应用程序中发布和获取数据。

可以使用 Jest 来测试 API 行为,以查看预期和意外结果。

代码语言:javascript
复制
// test userlist
test("userlist", async () => {
  const response = await fetch("https://jsonplaceholder.typicode.com/users");
  const users = await response.json();
  expect(users.length).toBeGreaterThan(0);
});

# 使用 Jest 模拟函数

使用 模拟函数 来侦测(查看)我们的函数被调用的情况,或者使用它来测试单个函数或整个模块。

在 Jest 中有以下三种类型的模拟函数:

  • Jest.fn(用于模拟单个函数)
  • Jest.mock(用于模拟整个模块)
  • Jest.spyOn(用于查看函数的调用情况)

更多信息请访问 https://jestjs.io/docs/en/mock-functions (opens new window)

# React 测试最佳实践

  • 对每个组件编写测试
    • 为每个组件编写测试,以确保它们能够正确地渲染和响应
  • 使用测试库
    • 使用 Jest 和 React Testing Library 等测试库,它们提供了专门用于测试 React 组件的工具和函数
  • 编写测试用例
    • 编写完整的测试用例,覆盖组件的所有代码路径,包括正常情况和异常情况
  • 使用快照测试
    • 使用 Jest 中的快照测试功能来验证组件是否按预期呈现
  • 使用模拟数据
    • 使用模拟数据来测试组件,以确保它们在不同的数据情况下都能正常工作
  • 使用模拟函数
    • 使用模拟函数来模拟组件的依赖项和外部接口,以便更好地控制测试环境
  • 集成测试
    • 编写集成测试来测试应用程序的整个流程,确保各个组件之间的交互和数据传递是正确的
  • 使用 CI/CD
    • 将测试集成到 CI/CD 管道中,以便在每个提交时自动运行测试并及时发现问题
  • 运行覆盖率测试
    • 运行覆盖率测试以检查测试代码是否覆盖了应用程序的所有部分,以便更好地了解测试的质量和覆盖范围
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023/2/11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 如何测试组件
    • # 功能测试
      • # 渲染测试
      • # 使用 Jest 进行功能测试
      • # React Testing Library
      • # 如何进行回归测试
      • # 使用 Cypress 进行端到端(e2e)测试
      • # 使用 Jest 进行集成测试
      • # 使用 Jest 模拟函数
      • # React 测试最佳实践
      相关产品与服务
      腾讯云服务器利旧
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档