我有一个带护照的受保护的api电话作为中间件:
server.get('/api/pipes', auth, api.pipes);
如果用户未获得授权,则auth方法返回401。
我有这个测试来查看用户是否已登录:
var postValidLoginCredentials = function(){
return request(url).post('/api/login')
.set('Content-Type', 'multipart/form-data')
.field('email', 'john.smith@example.com')
.field('password', 'example')
};
//This pass passes
it('should return 200 OK when a user enters a valid user and pass', function(done){
postValidLoginCredentials()
.end(function(err, res){
res.should.have.status('200');
done();
});
});
这是我对受保护的api电话的测试:
it('should return 200 OK on GET /api/pipes when user is loggedin', function (done) {
postValidLoginCredentials()
.end(function(err, res){
request(url)
.get('/api/pipes')
.set('Accept', 'application/json')
.expect(200, done);
})
});
我首先发布我的登录信息。在登录回调中,我然后调用受保护的api调用。它应该是200但我得到401.该功能在我的客户端有效,所以我的测试中出了问题。
我也试过了一个函数中的postValidLoginCredentials,但它没有用。
有什么想法吗?
答案 0 :(得分:1)
我假设你正在使用" local"登录策略,并使用cookie维护会话。
用户登录后,您需要一种方法来识别进行身份验证请求的登录用户。在cookie中使用会话ID时,您可以这样做:
it('should return 200 OK on GET /api/pipes when user is loggedin', function (done) {
postValidLoginCredentials()
.end(function(err, res){
request(url)
.get('/api/pipes')
.set('Accept', 'application/json')
.set('Cookie', res.headers['set-cookie'])
.expect(200, done);
})
});
但是,这只是一种解决方法,您应该使用超级代理功能。您可以在README中阅读相关内容(示例正是关于cookie存储),或者在超级回购中阅读一堆tests using it。