关闭

React 单元测试实例:快速上手指南(1)

发表于:2024-1-04 09:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Sanjeev Sharma    来源:网络

  你是否正计划为你的React代码编写测试?是否因找不到好的入门教程而感到苦恼?那么,这篇文章正是你所需要的。在本文中,我们将涵盖编写单元测试的所有步骤以及这个过程中可能遇到的错误和问题。
  本文使用了Jest和ReactTestingLibrary库。如果你想使用其他库也没关系,文中的一些基础知识也会对你有所帮助。
  为什么要编写测试
  当然,不写测试代码也可以完成产品开发。用户、产品经理,甚至测试人员或QA都不在乎该产品是否有测试代码。但是你,作为一名开发人员,应该在乎!
  假设你有一个拥有数万用户的网站,当你对一个公共的工具函数做了一些重构(或添加了一个功能修复),并在应用中某个调用它的地方进行了测试,表明该函数可以正常运行。于是你选择在周五上线(这是个低级错误)。然后,该函数在应用中的其他地方无法运行,导致网站在周末期间出现线上故障。此时,你多么希望这些地方能有测试代码,可以在发布生产之前自动运行,从而避免此次故障。
  上述场景比你想象的还要普遍。你可能还没遇到过(不过,这是迟早的事情),但是包括我在内的很多工程师都已经遇到过了。
  因此,测试代码之所以很重要,主要有以下几个原因:
  ·增强你对代码发布上线的信心。
  · 测试代码本身也是一种文档。
  · 有助于调试和重构。
  · 从长远来看,有助于减少开发时间。
  对于所有希望晋升的初级开发人员来说,务必要具备编写测试代码的能力。
  测试教程
  我们将从零开始教你编写测试代码,所以请准备好终端。首先,我们使用vite创建一个示例项目。
  在创建项目后,使用以下命令运行它。
  程序运行之后,你会在页面上看到一个demo应用。
  我们不会给该应用添加新功能,但为了给按钮编写测试代码,我们需要将按钮重构为一个单独的组件。
  接下来,我们在页面上添加两个按钮:
  1. 一个按钮的功能是点击时将count的值乘以2。
  2. 另外一个按钮的功能是点击时按以下顺序执行操作:如果count的值以0结尾,那么就将它的值除以2。如果count的值是斐波那契数,那么就将它的值加1。否则,将count的值进行平方操作。
  我们需要在utils模块中声明上面代码中用到的两个函数。同时,我们也声明了一些辅助函数,但由于其他地方并不会用到这些辅助函数,因此这里不需要做导出。
  代码已经准备好,现在可以开始编写测试代码了。这里我们跳过React代码,直接先给工具函数编写测试。这有助于我们了解Jest框架的大致用法。
  下面,让我们为doubleTheNum函数编写测试。
  上面的代码用于测试我们的函数是否可以按预期执行。任何测试代码都会包含以下这些关键组件:
  describe函数:第一个参数是字符串,它会在测试运行的时候显示。第二个参数则是测试实际执行的函数。describe函数的主要作用是对同类型的测试进行分组。这里只有一个测试,在另外一个示例中,你会看到其中有多个测试。
  it函数:其参数结构和describe函数类似。但这里的字符串参数应该尽可能详细地描述测试函数的具体内容。当然,你也可以使用test函数替代it。
  expect语句块:此函数中的前三行很简单。其最后一行是通过断言来判断doubleTheNum函数能否正确运行。此外,这里我们还用到了toEqual匹配器函数。
  Jest提供了很多匹配器,例如:
  1. toBeNull用于匹配null。
  2. toBeTruthy用于匹配判定结果为true的语句。
  为了运行测试,我们需要先安装Jest:
  然后在package.json中添加测试脚本:
  最后,通过执行yarntest命令来运行测试。
  对于大多数人来说,上面的步骤已经足够了。但如果你遇到了与模块导入或TypeScript相关的任何问题,请按以下步骤进行操作:
  1. 安装并设置@babel/preset-env:
  然后,将它配置到package.josn中:
  2. 安装TypeScript依赖库:
  然后,在jest.config.ts中添加Jest配置:
  然后执行测试,结果如下:
  从输出中可以看到我们在describe和it函数中声明的字符串信息。
  恭喜,你完成了第一个测试!
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号