with unit test node express mocha middleware

unit - mocha node express



Verificar si se está utilizando un middleware determinado (1)

Express no permite esto muy limpiamente.

Lo mejor que puede hacer es mirar app._router.stack , específicamente en las referencias de función, o si eso no es posible, el nombre de las funciones:

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

Entonces, recomiendo un enfoque ligeramente diferente. Si puede obtener una referencia de la función de middleware que espera que use su aplicación, puede use y afirmar lo que se pasó.

(pseudo-código-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);

Espero que sea algo ilustrativo. El punto es inyectar cosas para que no necesites afirmar en la aplicación real propiamente dicha, puedes simplemente inyectar objetos simulados y hacer tus afirmaciones basadas en eso.

Probé la documentación oficial, pero no pude averiguar cómo comprobar si un middleware determinado (es decir, morgan) está siendo utilizado por la aplicación actual. Dado que la configuración de mi middleware depende de la situación de desarrollo / producción, me gustaría verificar que estén activos dentro de mis pruebas de moka