rba*_*ado 3 middleware mocha.js express
我尝试了官方文档,但无法找到如何检查当前应用程序是否正在使用给定的中间件(即morgan)。由于我的中间件配置取决于开发/生产情况,因此我想在我的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;
}
Run Code Online (Sandbox Code Playgroud)
因此,我建议使用稍微不同的方法。如果可以获取您希望应用程序访问的中间件功能的引用,则use可以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);
Run Code Online (Sandbox Code Playgroud)
希望这是说明性的。关键是要注入事物,这样您就不必在实际的Express应用程序本身上进行断言,您只需注入模拟对象并根据这些对象进行断言即可。
| 归档时间: |
|
| 查看次数: |
1264 次 |
| 最近记录: |