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

Posted

技术标签:

【中文标题】运行测试时如何优雅地跳过 express-jwt 中间件?【英文标题】:How to elegantly skip express-jwt middleware when running tests? 【发布时间】:2017-05-03 23:45:35 【问题描述】:

这是我创建的一个小型中间件,用于在我的 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(); ;
    

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

【问题讨论】:

【参考方案1】:

我认为您对外观不满意是对的。我认为您真正想要做的是从测试代码中模拟您的身份验证,而不是在您的实际应用程序代码中。一种方法是通过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()  ... );

【讨论】:

以上是关于运行测试时如何优雅地跳过 express-jwt 中间件?的主要内容,如果未能解决你的问题,请参考以下文章

跳过测试和预期失败.py

Python+selenium之跳过测试和预期失败

如何有条件地跳过python中for循环中的迭代步骤数?

如何有条件地跳过 Grails Spring Security 插件过滤器链中的 SecurityContextPersistenceFilter 过滤器

字符串长度的for循环奇怪地跳过了一些字符

有条件地跳过案例