2016-09-06 61 views
1

我的API使用express-session和认证基础上,req.session.user物体的存在的任何请求,如下图所示:如何将express-session req.session.user附加到chai-http请求?

app.use(function(req, res, next) { 
    if (req.session.user) { 
    console.log('Authenticated request\n'); 
    next(); 
    } else { 
    console.log('Request not authenticated, request rejected\n');  
    res.status(403).json({'message': 'Request rejected'});; 
    } 
}); 

我正在写我的chai-http API测试,如下图所示:

describe('test', function(){ 
    it('/test', function(done){ 
    chai.request(server) 
    .get('/test') 
    .end(function(err, res){ 
     res.body.should.be.a('object'); 
    }); 
    }); 
}); 

问题
我想让请求通过上面的认证。如何将.session.user对象添加到我的chai-http请求中?我应该改用supertest吗?

回答

0

您是否在使用护照进行身份验证,如果是这样,请参阅下文。如果不是:检查出这种实现护照存根来看看它是如何劫持中间件伪造用户:

https://github.com/gtramontina/passport-stub/blob/master/src/passport-stub.coffee

使用这种技术,你可以插入中间件到应用程序伪造用户

如果您使用的护照:

如何使用护照存根

我检查了https://github.com/gtramontina/passport-stub

这里是我对/users路线的测试:

//During the test the env variable is set to test 
process.env.NODE_ENV = 'test'; 

var chai = require('chai'); 
var chaiHttp = require('chai-http'); 
var expect = chai.expect 

var passportStub = require('passport-stub'); 

var User = require.main.require('models/User'); 

// https://gist.github.com/branneman/8048520#7-the-wrapper 
var app = require.main.require('app'); 



chai.use(chaiHttp); 

passportStub.install(app); 


describe('Users Controller', (done) => { 

    var user, nock, github, mockToken, githubHost; 


    beforeEach((done) => { //Before each test we reset the database 
    User.query().del().then(() => { 
     var params = {name: 'bonzo', authtype: 'github', authid: '12345678'} 
     // Create a user so the db isn't empty 
     // May help us uncover odd bugs 
     new User(params).save() 
     .then((bonzo) => { 
      user = bonzo; 
      done(); 
     }) 
    }) 
    }); 

    describe('index',() => { 
    describe('without user',() => { 
     it('it should redirect to github.com home page', (done) => { 
      chai.request(app) 
       .get('/users') 
       .redirects(0) 
       .end((err, res) => { 
       expect(res.headers['location']).to.match(/^\//); 
       done(); 
       }); 
     }); 
    }); 

    describe('with user',() => { 
     it('it should display users list', (done) => { 

      passportStub.login({ 
      get: function(){ return 'bonzo'; } 
      }); 

      chai.request(app) 
       .get('/users') 
       .redirects(0) 
       .end((err, res) => { 
       expect(res.text).to.match(/bonzo/); 
       done(); 
       }); 
     }); 
    }); 
    }); 
}); 
相关问题