How to authenticate Supertest requests with Passport?

后端 未结 8 1447
囚心锁ツ
囚心锁ツ 2020-11-28 21:22

I\'m using Passport.js for authentication (local strategy) and testing with Mocha and Supertest.

How can I create a session and make authenticated requests with Supe

8条回答
  •  伪装坚强ぢ
    2020-11-28 22:20

    As zeMirco points out, the underlying superagent module supports sessions, automatically maintaining cookies for you. However, it is possible to use the superagent.agent() functionality from supertest, through an undocumented feature.

    Simply use require('supertest').agent('url') instead of require('supertest')('url'):

    var request = require('supertest');
    var server = request.agent('http://localhost:3000');
    
    describe('GET /api/getDir', function(){
        it('login', loginUser());
        it('uri that requires user to be logged in', function(done){
        server
            .get('/api/getDir')                       
            .expect(200)
            .end(function(err, res){
                if (err) return done(err);
                console.log(res.body);
                done()
            });
        });
    });
    
    
    function loginUser() {
        return function(done) {
            server
                .post('/login')
                .send({ username: 'admin', password: 'admin' })
                .expect(302)
                .expect('Location', '/')
                .end(onResponse);
    
            function onResponse(err, res) {
               if (err) return done(err);
               return done();
            }
        };
    };
    

提交回复
热议问题