使用 Mocha 和 Chai 测试 Node API

2025-06-04

使用 Mocha 和 Chai 测试 Node API

什么是 Mocha?

Mocha是一个功能丰富的 JavaScript 测试框架,可在 Node.js 和浏览器中运行,使异步测试变得简单而有趣。

  • 同步测试示例
it('two plus two is four', () => {
    expect(2 + 2).to.equals(4);
  });
Enter fullscreen mode Exit fullscreen mode
  • 异步测试代码
it("adds 2 numbers", (done) => {
   // perform asynchronous actions
   // write tests
    done(); // call the done function after test.
  });
Enter fullscreen mode Exit fullscreen mode

什么是 Chai?

Chai是一个用于 nodejs 和浏览器的 BDD(行为驱动开发)/ TDD(测试驱动开发)断言库,可以与任何 javascript 测试框架完美配对。

断言类型

Chai 有多个接口可供开发者选择。它们是:

chai.should();
foo.should.be.a('string'); 
foo.should.equal('bar');
foo.should.have.lengthOf(3);
tea.should.have.property('flavors').with.lengthOf(3);
Enter fullscreen mode Exit fullscreen mode
var expect = chai.expect;  
expect(foo).to.be.a('string'); 
expect(foo).to.equal('bar'); 
expect(foo).to.have.lengthOf(3); expect(tea).to.have.property('flavors').with.lengthOf(3);
Enter fullscreen mode Exit fullscreen mode
var assert = chai.assert;  
assert.typeOf(foo, 'string'); 
assert.equal(foo, 'bar'); 
assert.lengthOf(foo, 3);
assert.property(tea, 'flavors'); 
assert.lengthOf(tea.flavors, 3);
Enter fullscreen mode Exit fullscreen mode

服务器测试

现在,我将带领我们完成设置基本 Node API 和为其编写测试的过程。

首先要创建我们的项目文件夹并用 npm 初始化它以生成package.json文件。

npm init -y
Enter fullscreen mode Exit fullscreen mode

通过在终端上运行以下命令来安装依赖项

npm i express --save
npm i mocha chai chai-http --save-dev
Enter fullscreen mode Exit fullscreen mode

设置服务器

app.js在项目根目录中创建一个文件,并添加下面的代码来创建一个具有 express 和我们将要测试的端点的服务器。

const express = require("express");

const app = express();

app.use(express.json());

app.get("/", (req, res) => {
  res.json({ status: "success", message: "Welcome To Testing API" });
});

app.post("/add", (req, res) => {
  const { num1, num2 } = req.body;
  const add = (num1, num2) => {
    return num1 + num2;
  };
  res.json({
    status: "success",
    result: "Welcome To Testing API",
    result: add(num1, num2)
  });
});

const PORT = process.env.PORT || 3000;

app.listen(PORT, () => console.log(`App listening on port ${PORT}`));

module.exports = app;

Enter fullscreen mode Exit fullscreen mode

安装脚本

将测试脚本添加到package.json文件。

"scripts": {
    "test": "mocha"
  }
Enter fullscreen mode Exit fullscreen mode

编写测试

在您的项目中创建一个测试目录,然后在创建的目录app.test.js中创建一个文件test

注意:我们将测试添加到test目录的原因是,mocha 默认会在项目中搜索测试目录,不过您可以根据自己的风格进行配置。更多信息请点击此处

然后添加下面的代码

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

const { expect } = chai;
chai.use(chaiHttp);
describe("Server!", () => {
  it("welcomes user to the api", done => {
    chai
      .request(app)
      .get("/")
      .end((err, res) => {
        expect(res).to.have.status(200);
        expect(res.body.status).to.equals("success");
        expect(res.body.message).to.equals("Welcome To Testing API");
        done();
      });
  });

  it("adds 2 numbers", done => {
    chai
      .request(app)
      .post("/add")
      .send({ num1: 5, num2: 5 })
      .end((err, res) => {
        expect(res).to.have.status(200);
        expect(res.body.status).to.equals("success");
        expect(res.body.result).to.equals(10);
        done();
      });
  });
});

Enter fullscreen mode Exit fullscreen mode

此时,您的文件夹结构应如下图所示
文件夹结构

要运行测试,请在终端上运行以下命令。

npm test
Enter fullscreen mode Exit fullscreen mode

一旦测试运行,如果测试通过,您应该在终端上收到成功响应,如下例所示
成功测试

...如果测试失败,终端上会出现错误响应,如下例所示
错误测试

在Github上查找此项目中使用的代码在此处
查找有关 Mocha 的更多信息在此处 查找有关 Chai 的更多信息

结论

在本文中,我们学习了如何使用 Mocha 和 Chai 进行测试,以及如何为 Node API 编写测试。我将在此基础上改进本文和项目,并集成一个名为 Travis-CI 的持续集成工具。

如果您对本文有任何疑问或反馈,请随时发表评论。
感谢您的阅读。

文章来源:https://dev.to/easybuoy/testing-node-api-with-mocha-chai-248b
PREV
Patrón Repositorio(存储库模式)和 Unidad de Trabajo(工作单元)en ASP.NET Core WebApi 3.0
NEXT
关于如何改善开发人员日常工作的 8 个技巧。