Node.js - 单元测试中间件
Node.js - Unit Testing Middleware
我有一个带有中间件功能的 api,我用它来过滤传入的请求。这些函数检查 header 中是否存在 令牌 ,然后对数据库进行两次调用,一次检查令牌,一次获取一些信息并将其传递给请求 object,如果第一次调用成功。
我正在努力理解如何通过模拟请求 object 和数据库调用来对这些函数进行单元测试。
middleware.js
exports.checkToken = function (req, res, next) {
if (!req.get('token')) {
return res.status(400).json('Bad request');
}
var token = req.get('token'); //get token from the header
User.findOne({'token': token}, function(err, user) {
// skipped error checking or no user found
Account.findOne({'_id': user.account}, function(err, account) {
// skipped error checking or no account found
req.somevalue = account;
return next();
});
});
};
目前我正在使用 mocha、chai 和 sinon 并且正在考虑以下内容:
mock User.findOne 和 Account.findOne 使用 sinon.stub()
不太确定如何处理请求、资源和下一个 object。如何模拟这些?
我认为最好的选择是使用supertest。
https://www.npmjs.com/package/supertest
此包允许 运行 测试模拟应用程序上的完整请求 cicle。
我有一个带有中间件功能的 api,我用它来过滤传入的请求。这些函数检查 header 中是否存在 令牌 ,然后对数据库进行两次调用,一次检查令牌,一次获取一些信息并将其传递给请求 object,如果第一次调用成功。
我正在努力理解如何通过模拟请求 object 和数据库调用来对这些函数进行单元测试。
middleware.js
exports.checkToken = function (req, res, next) {
if (!req.get('token')) {
return res.status(400).json('Bad request');
}
var token = req.get('token'); //get token from the header
User.findOne({'token': token}, function(err, user) {
// skipped error checking or no user found
Account.findOne({'_id': user.account}, function(err, account) {
// skipped error checking or no account found
req.somevalue = account;
return next();
});
});
};
目前我正在使用 mocha、chai 和 sinon 并且正在考虑以下内容:
mock User.findOne 和 Account.findOne 使用 sinon.stub()
不太确定如何处理请求、资源和下一个 object。如何模拟这些?
我认为最好的选择是使用supertest。
https://www.npmjs.com/package/supertest
此包允许 运行 测试模拟应用程序上的完整请求 cicle。