gpt4 book ai didi

node.js - NodeJS 和 Express——如何模拟 token 认证中间件进行测试?

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:09 25 4
gpt4 key购买 nike

我正在制作一个使用 JWT 进行身份验证的 REST API,但为了测试我的端点,我想模拟验证 JWT 的中间件。

我定义了一个用于检查 token 的中间件:

// 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.'
});

}
}
}

然后在我的路由器中,我可以在 protected 端点上导入并使用这个中间件

// routes/someRoutes.js

var router = require('express').Router();
var verifyToken = require('../middlewares/auth').verifyToken;

router.use(verifyToken);

// define routes

现在我想模拟这个中间件,以便我可以在不需要有效 token 的情况下测试端点。我尝试过使用 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();
});
});
});

但这仍然是调用原来的verifyToken方法。非常感谢任何帮助!

最佳答案

  1. 更改您的 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) {
...
  • 如果您使用supertest或具有相同功能的包,使用环境变量运行 mocha - NODE_ENV=test mocha

  • 如果完全运行测试您的应用程序,那么您应该使用环境变量 - NODE_ENV=test npm start 启动它。

  • 这不是 mock ,但希望对你有帮助。

    关于node.js - NodeJS 和 Express——如何模拟 token 认证中间件进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40440953/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com