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

在现代的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