Mocha chai 请求和 express-session

Mocha chai request and express-session

当使用两个嵌套的 chai 请求时,会话丢失。

chai.request(server)
    .post('/api/v1/account/login')
    .send({_email: 'test@test.com', _password: 'testtest'})
    .end(function(err, res){
        chai.request(server)
        .get('/api/v1/user/me')
        .end(function(err2, res2){
            //here i should get the session, but its empty
            res2.should.have.status(200);
            done();
        });
    });

而且我很确定这是我的 mocha 测试中的一个错误,因为我在测试之外尝试了它(登录然后检索会话)并且正在设置会话。

express 本身没有任何原生会话支持。我猜你正在使用一些会话中间件,例如 https://github.com/expressjs/session.

同时,我猜你正在使用 chai-http 插件发送 HTTP 请求。在 chai-http 中,为了在不同的 HTTP 请求之间保留 cookie(以便 req.session 可以在 express 端可用),您需要使用 chai.request.agent 而不是 chai.

这是您的代码的一个简单示例:

var agent = chai.request.agent(app);
agent.post('/api/v1/account/login')
     .send({_email: 'test@test.com', _password: 'testtest'})
     .then(function(res){
             agent.get('/api/v1/user/me')
                  .then(function(res2){
                      // should get status 200, which indicates req.session existence.
                      res2.should.have.status(200);
                      done();
     });
});

chai.request.agent可以参考http://chaijs.com/plugins/chai-http/#retaining-cookies-with-each-request