2016-10-05 1 views
1

Ich habe eine Express-App, die die Authentifizierung von JWT behandelt wird, und ich einfach speichern das Token in Sitzung nach dem Login.Persist Express-App-Sitzung in Mocha und Supertest

req.session.JWToken = '<token>'; 

Die Authentifizierungs-Middleware wie folgt aussieht:

this.use('(^\/admin')', expressJWT({ 
     secret: 'secret', 
     getToken: function fromHeaderOrQuerystring (req) { 
      if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') { 
       return req.headers.authorization.split(' ')[1]; 
      } else if (req.query && req.query.token) { 
       return req.query.token; 
      } else if (req.session.JWToken) { 
       return req.session.JWToken; 
      } 

      return null; 
     } 
    }).unless({path: ['/login', '/signup']})); 

ich dies mit Mokka und Supertest testen müssen, habe ich versucht, Code unten:

var app = require('./../app'); 
var request = require('supertest'); 

describe('app', function() { 
    var agent = request.agent(app); 

    it('should signin', function(done) { 

    agent 
     .post('/login') 
     .send({_email: '<email>', _password: '<password>'}) 
     .expect(200, done) 
     .end(function(err, res){ 
     if(err) throw err; 
      done(); 
     }); 
    }); 

    // how to persist session here ? 
    it('should get a restricted page', function(done) { 
    agent 
     .get('/admin') 
     .expect(200) 
     .end(function(err, res){ 
      if(err) throw err; 
      done(); 
     }); 
    }); 

}); 

haben keine Ahnung, wie die Sitzung beharren auf der zweiten it. Bitte führen Sie mich eine Richtung.

+0

Haben Sie das jemals herausgefunden? – frogbandit

+0

leider noch nicht .. bitte lassen Sie mich wissen, wenn Sie tun – egig

Antwort

1

Ich lief gestern in das gleiche Problem und fand es heraus. Versuchen Sie agent außerhalb der describe Blockeinstellung:

var app = require('./../app'); 
var request = require('supertest'); 

var agent = request.agent(app); 

describe('app', function() { 

    it('should signin', function(done) { 

    agent 
     .post('/login') 
     .send({_email: '<email>', _password: '<password>'}) 
     .expect(200, done) 
     .end(function(err, res){ 
     if(err) throw err; 
      done(); 
     }); 
    }); 

    // how to persist session here ? 
    it('should get a restricted page', function(done) { 
    agent 
     .get('/admin') 
     .expect(200) 
     .end(function(err, res){ 
      if(err) throw err; 
      done(); 
     }); 
    }); 

}); 

Wenn das nicht funktioniert, versuchen Sie den Login-POST in einer Schleife before tun sinon verwenden.

beforeEach((done) => {  
    agent 
     .post('/login') 
     .send({_email: '<email>', _password: '<password>'}) 
     .end((err, res) => { 
      if (err) throw err; 
      done(); 
     }); 
}); 

Wenn das nicht funktioniert, versuchen Sie und stellen Sie sicher, dass Ihre email und password Parameter korrekt sind.

+0

groß .. vielen Dank .. wird es so schnell wie möglich testen .. – egig

Verwandte Themen