使用 Mocha 和 Chai 测试 Node API
什么是 Mocha?
Mocha是一个功能丰富的 JavaScript 测试框架,可在 Node.js 和浏览器中运行,使异步测试变得简单而有趣。
- 同步测试示例
it('two plus two is four', () => {
expect(2 + 2).to.equals(4);
});
- 异步测试代码
it("adds 2 numbers", (done) => {
// perform asynchronous actions
// write tests
done(); // call the done function after test.
});
什么是 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);
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);
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);
服务器测试
现在,我将带领我们完成设置基本 Node API 和为其编写测试的过程。
首先要创建我们的项目文件夹并用 npm 初始化它以生成package.json
文件。
npm init -y
通过在终端上运行以下命令来安装依赖项
npm i express --save
npm i mocha chai chai-http --save-dev
设置服务器
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;
安装脚本
将测试脚本添加到package.json
文件。
"scripts": {
"test": "mocha"
}
编写测试
在您的项目中创建一个测试目录,然后在创建的目录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();
});
});
});
要运行测试,请在终端上运行以下命令。
npm test
一旦测试运行,如果测试通过,您应该在终端上收到成功响应,如下例所示
结论
在本文中,我们学习了如何使用 Mocha 和 Chai 进行测试,以及如何为 Node API 编写测试。我将在此基础上改进本文和项目,并集成一个名为 Travis-CI 的持续集成工具。
如果您对本文有任何疑问或反馈,请随时发表评论。
感谢您的阅读。