En una de mis rutas de ExpressJS, estoy usando la estrategia de portador HTTP y la estrategia local de PassportJS juntas. Significa que el usuario debe iniciar sesión y debe tener un token de portador para llegar a esa ruta.
function isLoggedIn(req, res, next) { // if user is authenticated in the session, carry on if (req.isAuthenticated()) return next(); // if they aren't redirect them to the home page res.redirect('/login'); } app.route('/api/someaction') .get(passport.authenticate('bearer', { session: false }), isLoggedIn, function(req, res, next) { console.log(req.user.userID); });Cuando busco esta ruta con mi navegador o con Postman (después de configurar las cookies para la estrategia local), funciona como se esperaba.
Ahora necesito escribir pruebas de integración para esta ruta con MochaJS/ChaiJS. Este es mi archivo de prueba:
var server = require('../app.js'); var chai = require('chai'); var chaiHttp = require('chai-http'); var should = chai.should(); var expect = chai.expect; chai.use(chaiHttp); describe('...', () => { it('...', (done) => { chai.request(server) .get('/api/someaction') .set('Authorization', 'Bearer 123') .end((err, res) => { // asserts here done(); }); }); }); Al probar este archivo con MochaJS, req.user.userID en /api/someaction siempre está indefinido.
¿Cómo puedo burlarme de las estrategias de PassportJS para obtener un objeto req.user dentro de la ruta?