使用 Chai-http 测试 Express 接口的正确姿势

在 Web 开发中,接口的测试是必不可少的一环。Express 是 Node.js 中一个非常流行的 Web 框架,常常用来搭建后端服务,而 Chai-http 是一个非常常用的 Node.js HTTP 测试库,可以轻松地对 Express 接口进行测试。在本文中,我们将介绍如何使用 Chai-http 对 Express 接口进行正确的测试。

安装 Chai-http

首先,我们需要在项目中安装 Chai 和 Chai-http。在项目的根目录下,运行以下命令:

创建 Express 应用

接下来,我们需要在项目中创建一个 Express 应用。在项目的根目录下,创建一个名为 app.js 的文件,并添加以下代码:

const express = require('express');
const app = express();

app.get('/hello', (req, res) => {
  res.send('Hello, world!');
});

app.listen(3000, () => {
  console.log('Server is up and running on port 3000');
});

上面的代码创建了一个简单的 Express 应用,该应用监听在 3000 端口上,并向客户端返回 Hello, world! 字符串。

编写测试用例

接下来,我们将使用 Chai-http 编写测试用例。在项目的根目录下,创建一个名为 test.js 的文件,并添加以下代码:

const chai = require('chai');
const chaiHttp = require('chai-http');
const app = require('./app');

chai.use(chaiHttp);

const expect = chai.expect;

describe('Test /hello endpoint', () => {
  it('should return status 200', (done) => {
    chai.request(app)
      .get('/hello')
      .end((err, res) => {
        expect(res.status).to.equal(200);
        done();
      });
  });

  it('should return "Hello, world!" message', (done) => {
    chai.request(app)
      .get('/hello')
      .end((err, res) => {
        expect(res.text).to.equal('Hello, world!');
        done();
      });
  });
});

上面的代码测试了我们先前创建的 Express 应用中的 /hello 端点。describe 块定义了我们要测试的接口,而 it 块则用来定义具体的测试用例。每个 it 块都通过 Chai-http 发送一个请求,并检查响应内容是否符合预期。

我们可以在终端运行以下命令运行测试用例:

如果测试通过,终端应该输出以下内容:

高级用法

在实际的开发过程中,我们可能需要对 POST、PUT 和 DELETE 等请求方法进行测试,也可能需要在请求中添加请求头、请求体和查询参数。Chai-http 也提供了相应的 API,方便我们进行测试。

发送 POST 请求

it('should create a new resource', (done) => {
  chai.request(app)
    .post('/api/resources')
    .send({ name: 'New resource' })
    .end((err, res) => {
      expect(res.status).to.equal(201);
      expect(res.body.name).to.equal('New resource');
      done();
    });
});

上面的代码使用 send 方法将一个对象作为请求体,发送 POST 请求。

添加请求头

it('should return JSON response', (done) => {
  chai.request(app)
    .get('/api/resource')
    .set('Accept', 'application/json')
    .end((err, res) => {
      expect(res.status).to.equal(200);
      expect(res.headers['content-type']).to.equal('application/json; charset=utf-8');
      done();
    });
});

上面的代码使用 set 方法添加了一个请求头。

添加查询参数

it('should return filtered resources', (done) => {
  chai.request(app)
    .get('/api/resources')
    .query({ keyword: 'book' })
    .end((err, res) => {
      expect(res.status).to.equal(200);
      expect(res.body).to.be.an('array').that.has.lengthOf(2);
      done();
    });
});

上面的代码使用 query 方法添加了一个查询参数。

总结

本文介绍了如何使用 Chai-http 对 Express 接口进行测试。我们首先安装了 Chai 和 Chai-http,然后创建了一个简单的 Express 应用,并通过 Chai-http 编写了测试用例。在实际的开发过程中,我们还可以使用 Chai-http 来测试 POST、PUT 和 DELETE 请求,并添加请求头、请求体和查询参数,以便进行更全面的测试。希望本文能对您在前端开发中进行接口测试有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658fea71eb4cecbf2d5791dd


纠错
反馈