推荐答案
// www.javascriptcn.com code example
const request = require('supertest');
const app = require('../app'); // 假设你的 Express 应用在 app.js 中
describe('GET /api/users', () => {
it('should return a list of users', async () => {
const res = await request(app)
.get('/api/users')
.expect(200);
expect(res.body).toBeInstanceOf(Array);
expect(res.body.length).toBeGreaterThan(0);
});
});本题详细解读
1. 安装依赖
首先,你需要安装 supertest 和 jest(或其他测试框架)来编写和运行测试。
npm install supertest jest --save-dev
2. 引入依赖
在测试文件中,引入 supertest 和你的 Express 应用。
const request = require('supertest');
const app = require('../app'); // 假设你的 Express 应用在 app.js 中3. 编写测试用例
使用 describe 和 it 来组织你的测试用例。describe 用于分组,it 用于定义单个测试用例。
// www.javascriptcn.com code example
describe('GET /api/users', () => {
it('should return a list of users', async () => {
const res = await request(app)
.get('/api/users')
.expect(200);
expect(res.body).toBeInstanceOf(Array);
expect(res.body.length).toBeGreaterThan(0);
});
});4. 运行测试
使用 jest 或其他测试框架来运行测试。
npx jest
5. 解释代码
request(app):创建一个supertest请求对象,传入你的 Express 应用。.get('/api/users'):发送一个 GET 请求到/api/users路由。.expect(200):断言响应状态码为 200。expect(res.body).toBeInstanceOf(Array):断言响应体是一个数组。expect(res.body.length).toBeGreaterThan(0):断言数组长度大于 0。
6. 其他断言
你可以使用 supertest 提供的其他断言方法来验证响应头、响应体等。
.expect('Content-Type', /json/)
.expect('Content-Length', '15')7. 异步测试
由于 HTTP 请求是异步的,测试用例需要使用 async/await 来处理异步操作。
it('should return a list of users', async () => {
const res = await request(app)
.get('/api/users')
.expect(200);
expect(res.body).toBeInstanceOf(Array);
});