我有一个终点,通过调用next()
将控制传递给多个中间件函数,例如:
var express = require('express');
var router = express.Router();
router.post('/', isRequestValid, saveUser, respond)
function isRequestValid(req, res, next) {
// Do some stuff
next();
}
function saveUser(req, res, next) {
// Do more stuff
next();
}
function respond(req, res, next) {
// Do more stuff and send response
res.sendStatus(200);
}
我可以使用Chai和Mocha测试终点/
,例如:
describe("Testing / end point", () => {
it("Does it behave as expected", (done) => {
chai.request(server)
.post("/")
.send(someData)
.end((error, response) => {
// Assertions
});
})
})
我有点混淆了如何使用Chai和Mocha测试各个中间件函数isRequestValid
和saveUser
。
答案 0 :(得分:0)
如果你想测试你的中间件,你应该考虑将它们作为需求(通过导出它们),然后用模拟的请求和响应对象测试每个中间件。
假设这是您的 index.js 文件:
var express = require('express');
var router = express.Router();
router.post('/', isRequestValid, saveUser, respond)
function isRequestValid(req, res, next) {
// Do some stuff
next();
}
function saveUser(req, res, next) {
// Do more stuff
next();
}
function respond(req, res, next) {
// Do more stuff and send response
res.sendStatus(200);
}
module.exports.isRequestValid = isRequestValid;
然后:
const isRequestValid = require('./index.js').isRequestValid;
describe("Testing isRequestValid()", () => {
it("Does it behave as expected", (done) => {
const mockReq = {
body: {<some data>}
};
const mockRes = {};
isRequestValid(mockReq, mockRes, done);
})
})
这可能无法正常工作,但我认为这可能是您的一个解决方案。
编辑:看看这些项目是否可以轻松地模拟快速请求和响应