從所有的文件和我讀過的例子,應該可以使用代理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