In one of my ExpressJS routes, I'm using PassportJS' HTTP Bearer Strategy and Local Strategy together. It means user must be logged in and must have a bearer token to reach that route.
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);
});
When I browse to this route with my browser or with Postman (after setting cookies for local strategy) it's working as expected.
Now I need to write integration tests for this route with MochaJS/ChaiJS. This is my test file:
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();
});
});
});
While testing this file with MochaJS, req.user.userID
in /api/someaction
is always undefined.
How can I mock PassportJS strategies to get a req.user
object inside route?
via Eray
No comments:
Post a Comment