检查是否正在使用给定的中间件

时间:2014-10-10 16:46:09

标签: express mocha middleware

我尝试了官方文档,但我无法确定如何检查当前应用程序是否正在使用给定的中间件(即morgan)。由于我的中间件配置取决于开发/生产情况,我想在我的mocha测试中检查它们是否处于活动状态

1 个答案:

答案 0 :(得分:4)

Express并非如此干净利落。

您可以做的最好的事情是查看app._router.stack,特别是功能参考,或者如果不可能,请查看函数的名称:

function middlewareExists(app, name) {
    return !!app._router.stack.filter(function (layer) { 
        return layer && layer.handle && layer.handle.name === name; 
    }).length;
}

所以,我建议采用略有不同的方法。如果您可以获得对应用程序use的中间件功能的引用,则可以存根use并断言传递的内容。

(伪代码-ISH)

// server.js 

helperModule.registerMiddleware(app, 'production');

// helperModule.js

var someMiddleware = require('./someMiddleware');

module.exports = exports = {
    registerMiddleware: function (app, env) {
        if (env === 'production')
            app.use(someMiddleware);
    }
};

// helperModule.test.js

var helperModule = require('./helperModule');
var someMiddleware = require('./someMiddleware');
var app = { use: sinon.stub() };

helperModule.registerMiddleware(app, 'production');
expect(app.use).to.have.been.calledWith(someMiddleware);

希望这有点说明性。重点是注入事物,这样你就不需要在实际的快速应用程序本身上断言,你可以注入模拟对象并根据这些做出断言。