在前端开发中,单元测试不仅是提高代码健壮性和可维护性的重要手段,也是团队合作和协作的基石。而在单元测试中经常会需要调用经过身份验证的 API,例如需要在测试中模拟用户登录或调用 API 需要特定的权限等。本文将介绍如何在 Mocha 单元测试中调用经过身份验证的 API,以及如何将 API 身份验证信息安全地存储和管理。
准备工作
首先,我们需要将 API 身份验证信息存储到某个地方,以便在测试中使用。通常情况下,我们不应该将明文的密码或 API 密钥等敏感信息存储在代码中或版本管理系统中。一般来说,可将这些信息存储在环境变量或配置文件中,并使用代码读取这些信息。例如,我们可以在 config.js
中定义以下内容:
const config = { apiUrl: 'https://api.example.com', username: process.env.API_USERNAME, password: process.env.API_PASSWORD, };
在测试中,我们可以使用以下代码读取配置文件中的信息:
const config = require('../config');
使用 supertest 发送请求
对于需要发送 HTTP 请求的 API 测试,我们可以使用 supertest 库。supertest 使得在测试中发送 HTTP 请求变得简单,并允许我们在请求头中添加身份验证信息。以下是一个例子:
-- -------------------- ---- ------- ----- ------- - --------------------- ----- --- - ------------------ ------------- -------- -- -- - ---------- ------ - ---- -- ------- ------ -- - ------------ -------------- ---------------------- ---------------- ------------ ---------- ---- -- - -- ----- - ------ ---------- - ----------------------------------- ------- --- --- ---
在这个例子中,我们向 /users
路径发送 GET 请求,并在请求头中添加身份验证信息。如果返回状态码为 200,且返回的是一个数组,则测试通过。
使用 axios 发送请求
如果我们需要在测试中使用 Promise 风格的 API 调用,我们可以使用 axios 库。axios 是一个基于 Promise 的 HTTP 库,可在浏览器和 Node.js 中使用。以下是一个例子:
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ------- - -------------- ----- ---- - - --------- ---------------- --------- ---------------- -- ------------- -------- -- -- - ---------- ------ - ---- -- ------- -- -- - ------ ----- ------------------------ - ---- -- ----------- -- - --------------------------------- ----------------------------------- --- --- ---
在这个例子中,我们使用 axios.get()
方法向指定 URL 发送 GET 请求,并将身份验证信息作为第二个参数传递。如果返回状态码为 200,且返回的是一个数组,则测试通过。
安全地存储 API 身份验证信息
在实际项目中,我们可能需要在多个测试文件中使用同一份身份验证信息。为了保证信息的安全性,我们应该将这些信息存储在一个不受版本管理系统和外部访问的地方,并使用代码读取这些信息。以下是一种方案:
- 在代码库之外创建一个
.env
文件,并将其中的API_USERNAME
和API_PASSWORD
设置为相应的值。 - 在项目的启动脚本中,使用 dotenv 或类似的工具读取
.env
文件,并将其中的变量设置为环境变量。 - 在测试中,使用
process.env
对象读取环境变量中的身份验证信息。
结论
单元测试是保证代码健壮性和可维护性的重要工具,在测试过程中可能需要调用经过身份验证的 API。我们可以使用 supertest
或 axios
库发送 HTTP 请求,并在请求头中添加身份验证信息。为了保证信息安全性,我们应该将身份验证信息存储到一个不受版本管理系统和外部访问的地方,并使用代码读取这些信息。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672afdc3ddd3a70eb6d15024