2016-09-06 66 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(); 
       }); 
     }); 
    }); 
    }); 
}); 
相關問題