unitarias pruebas node hacer como app node.js express mocha sinon proxyquire

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?