使用SailsJS / Node,Mocha,Supertest进行authentication的会话存储

我有一个SailsJS设置,并使用Mocha / Supertest / Superagent组合来运行unit testing。 我search了四周,阅读supertest,现在它如何扩展superagent.agent('url')以存储会话和cookie。 我知道我/运动员/login和/运动员/当前路线正在工作,因为我可以使用邮差testing他们,他们返回正确的值。 然而,在testing时,我在login时获得了200个状态,但是404 /运动员/当前状态

这是我目前的工作:

1.摩卡testinglogin和validation用户login会话

var should = require('should'), assert = require('assert'), request = require('supertest'); it('/athlete/login should return 200 and athlete on success', function (done){ var athleteStub = AthleteStub(), setPassword = athleteStub.password; Athlete.create(athleteStub, function(err, newAthlete) { var user = request.agent(sails.express.app); user .post('/athlete/login') .send({ 'email': athleteStub.email, 'password': setPassword }) .expect('Content-Type', /json/) .end(function (err, res) { if(err) return done(err); console.log('test', user ); // res.should.have.status(200); // res.body.email.should.equal(athleteStub.email); user .get('/athlete/current') .set('Accept', 'application/json') .expect('Content-Type', /json/) .expect(200) .end(function (err, res) { if(err) return done(err); done(); }); }); }); }); 

2. /login和/当前操作

 login: function (req, res) { var bcrypt = require('bcrypt'); Athlete.findOneByEmail(req.body.email).done(function (err, athlete) { if (err) { res.json({ error: 'DB error' }, 500); } if (athlete) { if ( !athlete.isActive ){ res.json({ error: 'Your account is not active.' }, 500); } bcrypt.compare(req.body.password, athlete.password, function (err, match) { if (err){ res.json({ error: 'Server error' }, 500); } if (match) { // password match req.session.athlete = athlete.id; res.json(athlete); } else { // invalid password if (req.session.athlete){ req.session.athlete = null; } res.json({ error: 'Invalid password' }, 403); } }); } else { res.json({ error: 'User not found' }, 404); } }); }, current: function (req, res){ if(req.session.athlete){ Athlete.findOneById(req.session.athlete) .where({ isActive: true }) .done(function(err, athlete) { if (err) { res.json({ error: 'No active athlete found with ID of '+req.params.id }, 404); } else { res.json(athlete); } }); }else{ res.json({ error: 'No active athlete currently logged in.' }, 404); } }, 

我已经改变了一些路线,所以基本上把'/运动员/当前/'从上面现在'/运动员/我/'

  it("/athlete/me should return user data if athlete is logged in", function(done){ var agent = request.agent(sails.hooks.http.app), athleteStub = AthleteStub(), setPassword = athleteStub.password; agent .post('/athlete') .send( athleteStub ) .expect('Content-Type', /json/) .end(function (err, res) { should.not.exist(err); res.should.have.status(200); res.body.email.should.equal(athleteStub.email); res.body.firstName.should.equal(athleteStub.firstName); res.body.lastName.should.equal(athleteStub.lastName); agent .post('/athlete/login') .send({ 'email': athleteStub.email, 'password': setPassword }) .expect('Content-Type', /json/) .end(function (err, res) { should.not.exist(err); res.should.have.status(200); agent .get('/athlete/me') .expect(200) .end(function(err, res) { should.not.exist(err); res.body.email.should.equal(athleteStub.email); res.should.have.status(200); done(); }); }); }); }); 

不知道,如果你find了这个答案或不,但我能得到的cookie保存下面的代码:

 var agent = request.agent(sails.hooks.http.app); describe('Session', function(done) { it("should be able to create", function(done) { agent .post("/session/create") .send({email: "test.User1@gmail.com",password: "test", confirmation: "test"}) .expect('set-cookie', 'cookie=hey; Path=/', done) .end(function(err, res) { console.log('got a response!! '+ JSON.stringify(res.body)); done(); }); }); it("should be logged in", function(done) { agent .get("/user/index") .end(function(err, res) { console.log('got a response from user/index!! '+ JSON.stringify(res.body)); done(); }); }); });