2017-06-28 90 views
0

我想測試兩臺路由器,首先生成驗證碼,並保存在req.session.code中,第二次檢查代碼。 路由器:摩卡測試路由,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(); 
     }) 
    }) 
})` 

第一通,第二失敗,我與郵差手動測試,它的工作原理,我印刷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

您正在爲每個測試創建一個新代理,但您需要一個代理可以在測試中使用,如果您希望代理正確支持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')... 
    }); 

}); 
+0

謝謝!它真的是不同的代理問題。 – Borkes