【发布时间】:2014-06-17 21:16:11
【问题描述】:
我有一个以护照作为中间件的受保护 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 放在一个函数中,但它不起作用。
有什么想法吗?
【问题讨论】:
-
您有机会在下面查看我的建议吗?
-
感谢您的回答。在您发布之前,我找到了解决方案。我在登录时使用了设置的 cookie。然后我在受保护的路径调用中使用“获取”cookie。我使用较低级别的超级代理来执行此操作。所以我不确定你的解决方案是否有效。
-
我不确定我是否理解您的评论,但您不应该自己设置 cookie,因为护照会为您完成。还是你只是修改了你的测试,我弄错了?
标签: node.js passport.js supertest