运行 测试时如何优雅地跳过 express-jwt 中间件?

How to elegantly skip express-jwt middleware when running tests?

这是我创建的一个小型中间件,用于在我的 nodejs 应用程序测试期间跳过身份验证:

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() { ... });