supertest
是一个非常流行的轻量级 Node.js 库,主要用于 HTTP 请求的测试。它通过一个简洁的 API 提供了强大的功能,使得编写 HTTP 测试变得非常简单和直观。
安装
首先,你需要安装 supertest
及其相关的依赖。如果你正在使用一个基于 Express 或者 NestJS 的项目,通常还需要安装 @types/supertest
以获得类型定义。
1 | npm install supertest --save-dev |
基本用法
supertest
可以与任何 Node.js HTTP 服务器库一起使用,例如 Express、Koa、Fastify 等。以下是一个简单的例子,展示如何使用 supertest
测试一个 Express 应用:
示例应用
假设你有一个简单的 Express 应用:
1 | // app.js |
测试代码
你可以使用 supertest
来测试这个应用:
1 | // test/app.test.js |
主要功能
发送请求:
request(app)
:创建一个请求对象,app
是你的 HTTP 服务器实例。get(path)
:发送 GET 请求。post(path)
:发送 POST 请求。put(path)
:发送 PUT 请求。patch(path)
:发送 PATCH 请求。delete(path)
:发送 DELETE 请求。
设置请求头:
set(header, value)
:设置请求头。set(headers)
:设置多个请求头,headers
是一个对象。
发送请求体:
send(data)
:发送请求体数据,data
可以是字符串、对象或缓冲区。
附加文件:
attach(field, file, [filename])
:附加文件到请求体。
查询参数:
query(params)
:设置查询参数,params
是一个对象。
期望响应:
expect(status)
:期望响应状态码。expect(body)
:期望响应体。expect(header, value)
:期望响应头。expect(callback)
:期望回调函数,用于更复杂的断言。
高级用法
链式调用
supertest
支持链式调用,使得代码更加简洁:
1 | it('should return "Hello, World!"', async () => { |
测试 POST 请求
1 | it('should create a new user', async () => { |
测试文件上传
1 | it('should upload a file', async () => { |
结合测试框架
supertest
经常与 Jest、Mocha、Chai 等测试框架一起使用。以下是一个结合 Jest 的例子:
1 | // test/app.test.js |
总结
supertest
是一个非常强大且易用的库,适用于各种 HTTP 测试场景。它通过简洁的 API 和链式调用方式,使得编写测试代码变得非常直观和高效。