我目前正在尝试为我使用node.js构建并表达的API编写一些单元测试。我正在使用express-session为用户创建会话数据,成功登录后,会将用户的ID插入到会话数据中。这样,当他们从API发出另一个请求时,我可以检查会话是否包含ID,如果不是,则显然用户未登录,因此返回401
状态。
我想测试我的登出路线:
app.get("/logout",(req,res)=>{
if(req.session.UserID){
req.session.destroy((err) => {
console.error(err)
})
res.status(200).send("logged out")
}else{
res.status(401).send("not logged in ")
}
})
我一直在使用supertest-session,按照他们在npm页面上进行的测试来测试这条路线,以下是我到目前为止的结果:
var session = require('supertest-session');
var app = require('../app')
var testSession = null;
beforeEach(function () {
testSession = session(app);
});
describe("/logout",()=>{
var authenticatedSession;
beforeEach(function (done) {
testSession.post('/login')
.send({email:"roman@mail.com", password:"secet"})
.expect(200)
.end(function (err) {
if (err) return done(err);
authenticatedSession = testSession;
console.log(authenticatedSession.session)
return done();
});
});
it("Deletes the users session from session storage",(done)=>{
authenticatedSession.get("/logout")
.expect(200)
.expect("logged out",done)
})
})
但是,我收到一个错误代码,表示它应该为200,但它得到的是401,这表示该用户尚未登录,我尝试登录authenticatedSession
,但其中不包含来自登录名的数据beforeEach()
功能。我对使用超级测试(刚从今天开始)很陌生,希望对您有所帮助!