在我的一条ExpressJS路线中,我正在使用PassportJS的HTTP承载策略和本地策略。这意味着用户必须登录并且必须拥有承载令牌才能到达该路由。
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);
});
当我使用浏览器或邮递员浏览此路线时(在为本地策略设置cookie之后),它按预期工作。
现在我需要用MochaJS / ChaiJS为这条路线编写集成测试。这是我的测试文件:
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();
});
});
});
在使用MochaJS测试此文件时,req.user.userID
中的/api/someaction
始终未定义。
如何模拟PassportJS策略以在路由中获取req.user
对象?