【问题标题】:How to attach express-session req.session.user to chai-http request?如何将 express-session req.session.user 附加到 chai-http 请求?
【发布时间】:2017-01-14 09:17:04
【问题描述】:

我的 API 使用 express-session 并根据 req.session.user 对象的存在对任何请求进行身份验证,如下所示:

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 吗?

【问题讨论】:

    标签: javascript node.js express chai express-session


    【解决方案1】:

    您是否使用护照进行身份验证,如果是,请参见下文。如果不是:查看 Passport-stub 的这个实现,看看它是如何劫持中间件来伪造用户的:

    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();
                  });
            });
        });
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      相关资源
      最近更新 更多