testing一个受保护的API调用,摩卡,supertest,节点js,护照

我有一个保护的API与护照作为中间件:

server.get('/api/pipes', auth, api.pipes); 

如果用户没有授权,则auth方法返回401。

我有这个testing,看看用户是否login:

  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调用的testing:

 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); }) }); 

我首先发布我的login信息。 在logincallback,然后我打电话给我保护的API调用。 它应该是200,但我得到了401.该function在我的客户端运行,所以在我的testing中出现了问题。

我也尝试但我的postValidLoginCredentials在一个函数,但它没有工作。

任何想法?

我假设你使用“本地”login策略,并保持与cookie的会话。

用户login后,您需要一种方法来识别正在进行身份validation请求的login用户。 在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); }) }); 

但是,这只是一个解决方法,您应该使用supertest的代理function。 你可以在自述文件 (这个例子恰好是关于cookie存储)中读取它 ,或者在超级仓库中使用它读取一堆testing 。