如何使用 Chai.js 和 Supertest 进行 Express.js RESTful API 测试?

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

在现代的web应用程序中, RESTful API 是不可避免的一部分。为了保持正确的功能和高质量的应用程序,我们需要对API进行测试。本文将介绍如何使用Chai.js和supertest测试你的Express.js RESTful API,以便于你捕获API中的任何错误,并确保API的正确功能。

什么是 RESTful API?

REST(Representational State Transfer)是一个用于构建Web服务的架构风格,它是Web 2.0时代的设计思路。RESTful API是基于REST架构风格的API,它使用 HTTP 协议中的GET、POST、PUT和DELETE方法来访问资源,并将资源表示为 URL。

RESTful API 的优势在于它们易于与各种编程语言集成,由于它们是基于 HTTP 和 URL 的,所以它们对于通过网络进行数据交换的前后端应用程序非常有用。

在本文中,我们将专注于使用 Express.js 和它的路由来创建 RESTful API。

Chai.js 是什么?

Chai.js 是一个用于 Node.js 和浏览器的 TDD/BDD 断言库,允许开发人员进行易于阅读的测试。Chai.js 的核心思想是基于链接语言的自然语言断言,并提供了与不同测试框架的集成,例如 Mocha 和 Jasmine。

Supertest 是什么?

Supertest 是一个基于 Superagent 的库,用于测试 Node.js HTTP 服务器。它的主要目的是使 HTTP 请求和响应的测试更简单,例如在断言时检查响应的状态码、头信息和主体内容等等。

必要的准备工作

在开始本教程之前,你需要安装以下工具/软件:

  1. Node.js (v8.12.0 或更高版本) 官方可下载地址;
  2. npm (v6.4.1 或更高版本) 官方可下载地址;
  3. Express.js (v4.16.0 或更高版本) ;
  4. Chai.js (v4.2.0 或更高版本) ;
  5. Supertest (v3.3.0 或更高版本) ;

创建 RESTful API

在开始进行测试之前,我们需要先创建一个 RESTful API,用作测试的目标。为了简化示例代码作用,我们将只创建一个 GET 请求。使用以下代码创建一个名为 server.js 的 Express.js 应用程序。

----- ------- - -------------------
----- --- - ----------
----- ---- - -----

------------ ----- ---- -- -
    ----------------------------- -- -- -------
---

---------------- -- -- -
    ------------------- -- --------- -- ---- ----------
---

现在,在终端上输入以下命令以启动服务器。

---- ---------

现在我们的服务器已经启动并且可以在端口 3000 上访问。

集成 Supertest 和 Chai.js

接下来,我们需要为我们的 Express.js RESTful API 集成 Supertest 和 Chai.js。首先,在终端中,进入我们的项目的根目录,为我们的应用程序安装依赖项。

--- ------- --------- ---- ----------

上述命令将安装 supertest 和 chai 作为开发依赖项。

修改 server.js:

----- ------- - -------------------
----- --- - ----------
----- ---- - -----

------------ ----- ---- -- -
    ----------------------------- -- -- -------
---

-- ------------
-------------- - ----

---------------- -- -- -
    ------------------- -- --------- -- ---- ----------
---

编写测试用例

现在,我们需要编写测试用例针对服务器进行测试。在你的项目根目录中,创建一个名为 test 的文件夹,并在其中创建一个名为 server.test.js 的文件。先考虑使用 Chai.js 编写简单的测试用例。

----- --- - ---------------------
----- ---- - ----------------
----- ------- - ---------------------
----- ------ - ------------

---------------- --- ------ -- -- -
  
  ------------- --- -- -- -
    ---------- ------ --- ------- ------- -- ---------- ------- ------ -- -
      ------------
        ---------
        ---------- ---- -- -
          ---------------------------------
          ---------------------------------- -- -- -------
          -------
        ---
    ---
  ---

---

我们创建了一个名为 server api test 的测试套件,并且在其内部创建了一个名为 GET / 的测试用例,该测试用例主要测试访问 / 路径时返回欢迎消息。在测试用例中,我们从 Supertest 中导入 request 方法来构建 HTTP 请求,导入 Chai.js expect 方法来进行断言。

使用以下命令运行测试:

--- ----- -------------------

结论

Chai.js 和 Supertest 在测试 Express.js RESTful API 方面非常易用。在本文中,我们首先创建了一个简单的 Express.js RESTful API,然后介绍了 Chai.js 和 Supertest,并使用它们构建了一组测试用例。测试 API 可以保证应用程序功能的正确性和一些非正常比较方式的提醒。学习了本文,我们可以更好的理解路由的设计和实用。

示例代码

完整代码参见Github

-
--- ---------
--- ----
-   --- --------------
--- ------------
--- -----------------
--- ------------

参考文献

  1. Chai.js Full Documentation
  2. Supertest Documentation
  3. How to Test Your Express APIs

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/67185e7cad1e889fe22a7a88


猜你喜欢

  • 使用 CSS Grid 进行响应式布局的技巧和细节

    CSS Grid 是一种相对较新的 CSS 布局系统,它提供了一种强大的方式来进行网格布局。使用 CSS Grid 进行响应式布局使网站能够适应不同的屏幕大小,这是现代 Web 设计中非常重要的一点。

    20 天前
  • 响应式设计中如何应对屏幕旋转对页面布局的影响

    响应式设计作为一种适应不同设备分辨率的设计方式,已经成为了现代前端开发中不可或缺的一部分。然而,在设备旋转的时候,页面布局可能会发生变化,这会影响用户对页面的体验。

    20 天前
  • 解决在 ECMAScript 2015 中的类方法问题

    在 ECMAScript 2015 中,我们可以使用 class 关键字来定义一个类。类中可以包含多个方法,但是在类方法中,可能会遇到一些问题。本文将会解决类方法中的一些问题,并提供示例代码。

    20 天前
  • 使用 Jest 和 Supertest 进行 Express 应用程序的集成测试

    在前端开发中,我们常常需要测试我们的应用程序以确保其达到预期的行为。而在 Express 应用程序中,我们可以使用 Jest 和 Supertest 工具来进行集成测试,以确保路由、中间件和控制器的功...

    20 天前
  • Next.js 中如何使用 Webpack?

    Next.js 是一款流行的 React 框架,它为前端开发者提供了许多便利。在 Next.js 的默认配置下,Webpack 会自动构建并打包你的应用程序,使开发人员无需担心 Webpack 的复杂...

    20 天前
  • 在 Kubernetes 中设置资源配额

    概述 Kubernetes 是一款开源容器编排系统,可以帮助我们管理和部署容器化的应用程序。在使用 Kubernetes 部署应用程序时,我们需要考虑资源的配额问题。

    20 天前
  • 实战:如何在 React 中使用 Tailwind

    在当前前端开发的趋势下,React 的使用越来越广泛。而在使用 React 进行开发时候,如何更加高效地使用 UI 库来帮助我们完成开发任务是一个不可避免的问题。在这篇文章中,我们将介绍如何将 Tai...

    20 天前
  • 无障碍设计:如何为语言障碍人士设计网站?

    作为前端开发人员,我们不仅要关注网站的外观和功能,还要关注使用网站的用户。然而,有些人面临语言障碍,这意味着他们在使用您的网站时可能会遇到很多困难。在本文中,我将向您介绍如何使用无障碍设计原则,为语言...

    20 天前
  • ES7 中的 Array.prototype [@@iterator] 方法使用技巧

    在ES7中,Array.prototype原型上新增了[Symbol.iterator]方法,该方法返回一个迭代器对象。该方法可以被用于遍历数组中的每一个元素。通过使用迭代器对象,我们可以避免使用传统...

    20 天前
  • React Native 项目如何实现 Webview 的调用?

    前言 在 React Native 开发中,我们有时需要在项目中使用一个 Webview 组件。Webview 组件可以用于嵌入 Web 页面,我们可以在 App 中使用 Webview 来展示一些网...

    20 天前
  • CSS 优化技巧,帮助您加速网站

    随着网站越来越大,CSS 文件的大小也变得越来越庞大。这极大地影响了网站的加载速度。在本文中,我们会介绍一些 CSS 优化技巧,帮助您加速网站加载速度。 1. 使用压缩工具 CSS 压缩工具可以将 C...

    20 天前
  • Babel vs TypeScript:该选哪个?

    前端开发人员可能会遇到一个问题:在开发过程中,应该使用哪个前端技术?这里有两个非常流行的选择:Babel 和 TypeScript。那么,该选哪个呢?本文将深入探讨两者的优缺点,以及在特定情况下应该如...

    20 天前
  • 响应式设计中如何处理多列文本对齐问题?

    在 web 开发中,响应式设计一直是一个热门话题。众所周知,响应式设计使用了一系列技术来让网站根据设备分辨率和屏幕大小,自适应调整布局。然而,对于包含多列文本的页面,对齐问题一直是最头痛的问题之一。

    20 天前
  • Jest 测试中处理 TypeError 等常见错误的实用技巧

    在前端开发过程中,测试是一个非常重要的环节。而 Jest 是前端开发中最常用的测试框架,它提供了丰富的测试工具和 API。但是,对于初学者来说,测试过程中可能会遇到各种错误,其中包括 TypeErro...

    20 天前
  • 如何使用 LESS 实现视差效果

    视差效果是一种流行的现代设计趋势,能够为网页增添立体感和动态感。LESS是一种CSS预处理语言,它提供了很多优秀的编写CSS样式的方法,本文将介绍如何使用LESS实现视差效果,包含详细的代码示例、学习...

    20 天前
  • AngularJS 中的 $rootScope 使用详解

    在 AngularJS 中,$rootScope 是一个非常重要的概念,它是整个应用程序的根范围,它包含了全局的作用域属性和方法,可以在整个应用程序中使用。$rootScope 是一个单例对象,任何 ...

    20 天前
  • 在 Cypress 中使用命令行接口实现测试脚本执行控制

    Cypress 是一个现代化的前端自动化测试工具,可以通过编写测试脚本来测试 Web 应用。Cypress 的命令行接口可以帮助我们更好地控制测试脚本的执行,实现更高效的测试流程。

    20 天前
  • 在什么情况下使用 CSS Reset

    在前端开发中,我们经常会使用 CSS 样式表来设置页面的样式。但是,在不同的浏览器中,相同元素的样式表可能会有不同的默认值,这会对我们的页面造成影响。为了解决这个问题,我们可以使用 CSS Reset...

    20 天前
  • 如何在 GraphQL 中实现缓存控制

    GraphQL 是一种用于 API 的查询语言,它使得客户端可以精确地指定它们所需的数据以及数据的结构。同时,由于 GraphQL 具有强大的类型系统和完整的文档,它也可以提供增量 API 更新和非常...

    20 天前
  • Jest 和 Enzyme 环境中支持多种协议的 React Native 单元测试

    Jest 和 Enzyme 环境中支持多种协议的 React Native 单元测试 React Native 是一种流行的移动应用程序开发框架,也是一个快速发展的开源社区。

    20 天前

相关推荐

    暂无文章