От всички документи и примери, които прочетох, трябва да е възможно да се поддържа сесия в супертест с помощта на агент:
var app = require('../../../server'),
should = require('should'),
request = require('supertest'),
mongoose = require('mongoose'),
User = mongoose.model('User'),
_ = require('lodash');
var user = {
name: 'Sterling Archer',
email: '[email protected]',
password: 'guest'
};
describe('user.me', function() {
var url = '/user';
var agent = request.agent(app);
var new_user = new User(user);
new_user.save();
it('should return a user object', function(done) {
agent
.post('/signin')
.send(_.omit(user, 'name'))
.expect(200).end(function(err, res) {
console.log(res.headers['set-cookie']);
});
agent
.get(url)
.expect(200)
.end(function(err, res) {
should.not.exist(err);
console.log(res.headers['set-cookie']);
res.body.should.have.property('user');
res.body.user.should.have.properties('name', 'email');
done();
});
});
});
Сесията трябва да продължи, тъй като всяка заявка по-горе използва един и същ агент. Това обаче изглежда не е така - изходът от регистрационните файлове на set-cookie следва:
[ 'connect.sid=s%3AsFl1DQ4oOxC8MNAm79mnnr9q.gMkp8iEWtG8XlZZ2rkmheBwxKAyLyhixqDUOkYftwzA; Path=/; HttpOnly' ]
[ 'connect.sid=s%3AEzfbPyRGMff7yBXc9OAX3vGT.Ze2YoxZzuB6F6OwOk7mvrk96yPP2G4MGV%2Bt1rVjTyS8; Path=/; HttpOnly' ]
passport.js се използва за удостоверяване и сесии. Бих очаквал connect.sid по-горе да бъде постоянен и за двете заявки, но изглежда, че се създава нова сесия при всяко повикване, така че агентът не е влязъл при второто повикване и не се връща потребителски обект.
Когато тествам приложението си ръчно в браузър, connect.sid остава постоянен след влизане и функционалността, която тествам, работи.
Сигурно правя нещо нередно с агента и се надявам някой да го забележи. В противен случай предложения за това как мога да отстраня проблема ще бъдат много оценени.
.set('Cookie',<sid>)
метод при второ повикване на агент, работи ли? - person Gntem   schedule 04.04.2014