通过supertest在护照托管API上使用mocha发送经过身份验证的请求

时间:2015-11-04 19:26:57

标签: node.js authentication mocha passport.js supertest

我第一次遇到这个问题已经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。

我可能错过了什么?

0 个答案:

没有答案