这是我创建的一个小型中间件,用于在对Node.js应用进行测试时跳过身份验证:

authentication(auth) {
    if (process.env.NODE_ENV !== 'test') {
        return jwt({
            secret: new Buffer(auth.secret, 'base64'),
            audience: auth.clientId
        });
    } else {
        return (req, res, next) => { next(); };
    }
}


我对它的外观不满意。有没有更优雅的方式来做到这一点?

最佳答案

我认为您对外观不满意是正确的。我认为您真正想做的是从测试代码中模拟出身份验证,而不是在实际的应用程序代码中进行模拟。一种方法是通过proxyquire

如果app.js需要通过var authentication = require('./lib/authentication')进行身份验证,那么一个非常简单的测试可能类似于以下内容

var proxyquire =  require('proxyquire');
var app = proxyquire('./app.js', {
  './lib/authentication': function() {
    // your "test" implementation of authentication goes here
    // this function replaces anywhere ./app.js requires authentication
  }
});

it('does stuff', function() { ... });

关于node.js - 运行测试时如何优雅地跳过express-jwt中间件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41213868/

10-10 23:57