2016-09-06 4 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'); 
    }); 
    }); 
}); 

質問
上記の認証に合格するようにします。 chai-httpリクエストに.session.userオブジェクトを追加するにはどうすればよいですか?代わりに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(); 
       }); 
     }); 
    }); 
    }); 
}); 
関連する問題