我第一次遇到这个问题已经24小时了。我知道有很多类似的,特别是在SO,但我无法弄清楚如何解决它。
我有具体要求:
所以我决定测试我的API,如:
var request = require('supertest');
...
describe('Routes', function () {
var anAgent;
var anotherAgent;
before(function (done) {
anAgent = request.agent(app);
anotherAgent = request.agent(app);
async.parallel([
function (callback) {
anAgent
.post('/api/users/login')
.send({user:user, password:password})
.expect(200)
.end(callback);
},
function (callback) {
userAgent
.post('/api/users/login')
.send({user:anotherUser, password:anotherPassword})
.expect(200)
.end(callback);
}
], done);
});
describe('/superroute', function () {
it('should return the user', function (done) {
anAgent
.post('/api/superroute')
.send(params)
.expect(200)
.end(function (err, res) {
should.not.exist(err);
res.body.err.should.equal('Super route');
done();
});
});
...
});
...
});
路线/superroute
描述为
express.Router().post('/superroute', auth.ensureAuthenticated, superCtrl.superroute);
ensureAuthenticated
中间件调用护照的req.isAuthenticated()
。
当我从简单的角度前端使用它时,此API工作正常,但是当我使用mocha运行测试时,passport.deserializeUser
方法未被调用,isAuthenticated
返回false
。事实上,用户是通过/login
电话正确记录和检索的,这就是我所知道的。
因此,呼叫返回401而不是200。
我可能错过了什么?