mocha测试路由,req.session.code未定义

时间:2017-06-28 06:42:14

标签: node.js session mocha

我想测试两个路由器,首先生成验证码,然后保留在req.session.code中,第二个检查代码。 路由器:

`router.post('/code', (req, res) = > {
   let text = generateCode();
   req.session.code = text;
   res.json({message: text}); 
 })`

`router.post('/check_code' , (req, res) => {
   let c = req.body.code;
   console.log(c, req.session.code) //when test, req.session.code is undefined
   if (c.toUpperCase() !== req.session.code.toUpperCase()) {
      return res.json('error');
   }
   return res.json('ok');
})`

然后,我使用supertestmocha测试。

`describe('test', function() {
   let code; //check code as body
   it('get verification code', function(done) {
     request.agent(app)
        .post('/code')
        .expect(200)
        .end(function(err, res){
         if (err) return done(err);
         code = res.body.message;
          done();
      })
   })
   it('check verification code', function(done) {
     request.agent(app)
        .post('/check_code')
        .send({code: code}) 
        .expect(200)
        .end(function(err, res){
         if (err) return done(err);
         code = res.body.message;
          done();
      })
   })
})`

第一次传递,第二次失败,我用postMan手动测试,它有效,我打印了req.session:

`session {
  cookie:
   {path: '/',
    _expires:null,
    originalMaxAge: null,
    httpOnly: true
   },
   code: xxxx  //there is code when use postMan,but not in mocha
}`

我在我的代码中使用了.agent,但它确实无效。那么当一些值保持在会话中时,我该如何测试路由器呢?我还没有找到同样的问题。

1 个答案:

答案 0 :(得分:1)

您正在为每项测试创建新代理,但如果您希望代理正确支持Cookie,则需要一个代理在测试中使用(因为代理会在内部存储收到的Cookie)以及随后使用同一代理发出的请求将使用这些cookie):

describe('test', function() {
   let agent = request.agent(app);
   let code; //check code as body

   it('get verification code', function(done) {
     agent.post('/code')...
   });

   it('check verification code', function(done) {
     agent.post('/code')...
   });

});