node.js - pruebas - express-session
¿Cómo simular un middleware en Express para omitir la autenticación para la prueba unitaria? (1)
Puede usar el sinon
de sinon
de sinon
to stub, pero debe hacerlo antes de que la referencia a auth.isAuthenticated
se establezca como un middleware, por lo que antes de auth.isAuthenticated
index.js
y la app
se crea. Lo más probable es que quieras esto en un gancho de beforeEach
:
var app;
var auth;
beforeEach(function() {
auth = require(''../wherever/auth/auth.service'');
sinon.stub(auth, ''isAuthenticated'')
.callsFake(function(req, res, next) {
return next();
});
// after you can create app:
app = require(''../../wherever/index'');
});
afterEach(function() {
// restore original method
auth.isAuthenticated.restore();
});
it(''it should return a 200 response'', function(done) {
request(app).post(''/subscriptions/sync'')
.set(''Authorization'',''Bearer ''+ authToken)
.send({receipt: newSubscriptionReceipt })
.expect(200,done);
});
Tenga en cuenta que incluso después de restaurar auth.isAuthenticated
, la instancia de la app
existente tendrá un código auxiliar, por lo que debe crear otra instancia de la app
si necesita obtener un comportamiento original por algún motivo.
Tengo los siguientes en Express
//index.js
var service = require(''./subscription.service'');
var auth = require(''../auth/auth.service'');
var router = express.Router();
router.post(''/sync'', auth.isAuthenticated, service.synchronise);
module.exports = router;
Quiero anular o simular que es autenticado para devolver esto
auth.isAuthenticated = function(req, res, next) {
return next();
}
Aquí está mi prueba de unidad:
it(''it should return a 200 response'', function(done) {
//proxyquire here?
request(app).post(''/subscriptions/sync'')
.set(''Authorization'',''Bearer ''+ authToken)
.send({receipt: newSubscriptionReceipt })
.expect(200,done);
});
He intentado burlarme de index.js usando proxyquire. ¿Creo que necesito apagar el enrutador? También he intentado anular en la prueba
app.use(''/subscriptions'', require(''./api/subscription''));
Debe haber una forma simple de burlarse de esto, así que no necesito autenticar la solicitud. ¿Algunas ideas?