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

标签 express mocha.js middleware

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

最佳答案

Express 不允许这样做。

您能做的最好的事情就是查看app._router.stack,特别是函数引用,或者如果不可能,则查看函数的名称:

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

所以,我推荐一种稍微不同的方法。如果您可以获得对您希望应用使用的中间件函数的引用,则可以对所传递的内容进行 stub use和断言。

(伪代码)

// 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);

希望这有一定的说明性。重点是注入(inject)东西,这样你就不需要在实际的 Express 应用程序本身上断言,你可以只注入(inject)模拟对象并根据这些对象进行断言。

关于express - 检查是否正在使用给定的中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26304234/

相关文章:

node.js - Mocha + Chai - 没有关于错误的详细信息

django - 在 Django 中间件中测量 View 执行时间 - 好主意吗?

javascript - 构建 MongoClient 和表达 : Client inside routes or routes inside client? 的最佳方式是什么

javascript - 为什么 GET 响应返回 Node 服务器 js 的 404 错误?

node.js - Morgan 在调用路由器后记录请求

node.js - NPM 如何更新/升级传递依赖?

mocha.js - 如何使用 chai assert 获取 mocha 以报告文件/行号?

mocha.js - 如何在 Mocha 钩子(Hook)之前设置超时?

c# - Asp.Net Core 中间件中的重定向不呈现目标页面

node.js - 在一篇文章中使用 2 个中间件功能