介绍
API 测试是现代前端开发不可或缺的一部分。在测试 API 的过程中,我们需要对接口的响应结果进行验证。SuperTest 是一个针对 Node.js 的 HTTP API 测试库。它的设计目的是为了实现一个简单的 API 测试框架。
Chai 是 JavaScript 测试框架的一个应用程序接口 (API)。它为渐进式测试框架,如Mocha和 Jest等提供了更好的支持。Chai 通过一组直观的断言来支持测试驱动开发 (TDD) 和行为驱动开发 (BDD) 等开发方式。
在本篇文章中,我们将讨论如何将这两者结合使用,以实现更好的 API 测试。
安装
在进行 SuperTest 和 Chai 环境安装前,确认您的 Node.js 和 NPM 的环境已经安装完毕。
在命令行中运行以下命令安装 SuperTest 和 Chai:
npm install supertest chai --save-dev
当然,你可以在你的 package.json 文件中手动添加依赖。
准备工作
在使用 SuperTest 和 Chai 进行 API 测试前,我们需要先了解要测试的 API 接口,例如:接口地址、请求方法、请求参数等等。
为了方便测试 API 接口,我们需要一个 HTTP 服务。在这里,我们使用了 Express 这个 Node.js 框架。通过 Express 我们可以非常方便的创建一个 HTTP 服务器来进行 API 接口测试。
请确保您已经熟悉 HTTP 服务器的基本概念并熟悉 Express 框架,接下来我们将假设您已经了解 Express,我们将在 Express 中设置一个 API。
// www.javascriptcn.com code example
const express = require('express');
const app = express();
// 路由 - GET 请求
app.get('/', (req, res) =>{
res.send('API 测试页面');
});
// 路由 - POST 请求
app.post('/api/login', (req, res) =>{
const userData = req.body;
if (userData.username && userData.password) {
res.status(200).json({ message: '登录成功!'});
} else {
res.status(400).json({ message: '请填写必填字段!'});
}
});
module.exports = app;在上述代码中,我们设置了两个路由,一个是 / 路由,另一个是 /api/login 路由。其中 / 路由是用来验证 Express 的 HTTP 服务器是否正常运行,而 /api/login 是用来模拟登录逻辑。
需要注意的是,我们在 /api/login 路由中通过 req.body 来获取请求参数。但是,这个 req.body 对象需通过 Express 中间件 body-parser 来解析,你需要通过以下命令安装并在 app.js 中进行配置:
npm install body-parser --save
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({extended:false}))API 测试
现在我们已经有了一个 API 接口,我们就可以用 SuperTest 和 Chai 来编写测试了。
在这里,我们将使用 GET 方法和 POST 方法对 / 和 /api/login 路径的 API 接口进行测试。 SuperTest 提供了 agent() 方法用于模拟 HTTP 请求,在 agent() 方法后,你可以对访问的 API 接口地址、请求方式、请求头、请求体等进行配置。
// www.javascriptcn.com code example
const app = require('./app');
const request = require('supertest');
const chai = require('chai');
const chaiHttp = require('chai-http');
const expect = chai.expect;
chai.use(chaiHttp);
describe('API 接口测试', () => {
describe('GET /', () => {
it('应该正常请求,并得到响应 "API 测试页面"', (done) => {
request(app)
.get('/')
.end((err, res) => {
expect(res.statusCode).to.equal(200);
expect(res.text).to.equal('API 测试页面');
done();
})
})
})
describe('POST /api/login', () => {
it('应登录成功', (done) => {
request(app)
.post('/api/login')
.send({username: 'testUser', password: '123456'})
.end((err, res) => {
expect(res.statusCode).to.equal(200);
expect(res.body.message).to.equal('登录成功!');
done();
});
});
it('应该出现错误信息:请填写必填字段!', (done) => {
request(app)
.post('/api/login')
.send({username: 'testUser'})
.end((err, res) => {
expect(res.statusCode).to.equal(400);
expect(res.body.message).to.equal('请填写必填字段!');
done();
});
});
});
});运行测试,我们将在命令行中看到如下输出:
✔ GET / 200 2ms ✔ POST /api/login 200 1ms ✔ POST /api/login 400 1ms
小结
本文介绍了如何使用 SuperTest 和 Chai 对 Express HTTP 服务器中的 API 进行测试。 在测试过程中,我们可以通过 send() 方法设定请求对象的参数,也可以通过 expect() 来判断响应对象的参数是否符合预期。
本文介绍的只是 API 测试的基础知识,使用了与 Express 相关的框架和库,其它框架和库的测试方式可能会有所不同。您可以根据不同的情况来选择不同的测试方式。
在实际项目中,我们应根据 API 接口的情况编写相应的测试脚本,确保 API 接口在各种情况下的稳定运行,辅助我们进行快速迭代。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d671a3a941bf7134c354f8