在现代的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 请求和响应的测试更简单,例如在断言时检查响应的状态码、头信息和主体内容等等。
必要的准备工作
在开始本教程之前,你需要安装以下工具/软件:
- Node.js (v8.12.0 或更高版本) 官方可下载地址;
- npm (v6.4.1 或更高版本) 官方可下载地址;
- Express.js (v4.16.0 或更高版本) ;
- Chai.js (v4.2.0 或更高版本) ;
- 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
- --- --------- --- ---- - --- -------------- --- ------------ --- ----------------- --- ------------
参考文献
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67185e7cad1e889fe22a7a88