Tom*_*ter 1 authentication mocking node.js express sinon
我正在制作一个使用JWT进行身份验证的REST API,但为了测试我的端点,我想模拟验证JWT的中间件.
我已经定义了一个用于检查令牌的中间件:
// middlewares/auth.js
nJwt = require('njwt');
nconf = require('nconf');
module.exports = {
verifyToken: function(req, res, next) {
// check header or url parameters or post parameters for token
var token = req.body.token || req.query.token || req.headers['x-access-token'];
// decode token
if (token) {
// verifies secret and checks exp
nJwt.verify(token, nconf.get("auth:secret"), function(err, verifiedJwt) {
if (err) {
return res.json({ success: false, message: 'Failed to authenticate token.' });
} else {
// if everything is good, save to request for use in other routes
req.userId = verifiedJwt.body.sub;
next();
}
});
} else {
// if there is no token
// return an error
return res.status(403).send({
success: false,
message: 'No token provided.'
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的路由器中,我可以在受保护的端点上导入和使用此中间件
// routes/someRoutes.js
var router = require('express').Router();
var verifyToken = require('../middlewares/auth').verifyToken;
router.use(verifyToken);
// define routes
Run Code Online (Sandbox Code Playgroud)
现在我想模拟这个中间件,以便我可以测试端点而无需有效的令牌.我尝试过使用chai/mocha/sinon,但没有太多运气
// tests/someRoutes.js
var auth = require('../middlewares/auth');
var sinon = require('sinon');
describe('someRoute', function() {
var verifyTokenStub;
before(function (done) {
verifyTokenStub = sinon.stub(auth, 'verifyToken', function(req, res, next) {
req.userId='test-id';
next();
});
});
});
Run Code Online (Sandbox Code Playgroud)
但这仍然是调用原始的verifyToken方法.任何帮助深表感谢!
middlewares/auth.js文件检查process.env.NODE_ENV.例:
// middlewares/auth.js
...
// decode token
if (token || process.env.NODE_ENV === 'test') {//Changes in this string
// verifies secret and checks exp
nJwt.verify(token, nconf.get("auth:secret"), function(err, verifiedJwt) {
...
Run Code Online (Sandbox Code Playgroud)
如果您使用具有相同功能的supertest或包,则使用环境变量运行mocha - NODE_ENV=test mocha.
如果用完全运行测试你的应用程序,那么你应该用环境变量启动它 - NODE_ENV=test npm start.
这不是嘲笑,但我希望它会对你有所帮助.
| 归档时间: |
|
| 查看次数: |
2385 次 |
| 最近记录: |