我正在製作一個使用JWT進行身份驗證的REST API,但要測試我的端點,我想模擬驗證JWT的中間件。NodeJS和Express - 如何模擬令牌認證中間件進行測試?
我已經定義了一箇中間件檢查令牌:
// 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.'
});
}
}
}
然後在我的路由器,我可以導入和使用該中間件上保護端點
// routes/someRoutes.js
var router = require('express').Router();
var verifyToken = require('../middlewares/auth').verifyToken;
router.use(verifyToken);
// define routes
現在我想嘲笑這個中間件以便我可以在不需要有效令牌的情況下測試端點。我試着用柴/摩卡/興農做什麼,但沒有多少運氣
// 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();
});
});
});
但這仍然是調用原來verifyToken方法。任何幫助深表感謝!
您是否找到任何解決方案? –