从所有的文件和我读过的例子,应该可以使用代理supertest坚持一个会话:supertest剂似乎并没有坚持的Node.js应用express.js会议
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();
});
});
});
由于上面的每个请求都使用相同的代理,因此会话应该保留。然而这似乎并不如此 - 从设置cookie的日志输出如下:被用于认证和会话
[ 'connect.sid=s%3AsFl1DQ4oOxC8MNAm79mnnr9q.gMkp8iEWtG8XlZZ2rkmheBwxKAyLyhixqDUOkYftwzA; Path=/; HttpOnly' ]
[ 'connect.sid=s%3AEzfbPyRGMff7yBXc9OAX3vGT.Ze2YoxZzuB6F6OwOk7mvrk96yPP2G4MGV%2Bt1rVjTyS8; Path=/; HttpOnly' ]
passport.js。我希望上面的connect.sid对于这两个请求都是恒定的,但是看起来每个呼叫都会创建一个新的会话,这样代理在第二次呼叫时就不会登录,并且不会返回任何用户对象。
当我在浏览器中手动测试我的应用程序connect.sid在登录后保持不变并且我测试的功能确实有效。
我一定在代理方面做错了什么,我希望有人能发现它。否则,关于如何调试该问题的建议将非常感谢。
'.set('Cookie',)'方法在第二个座席调用,它工作吗? –
Gntem
我曾尝试设置Cookie,因为我在其他一些示例中看到了该方法。但是,它不应该是必要的,也不会工作。 set()会在第一次调用完成之前在第二个代理程序上调用(因此cookie值将不可用)。 – Matt