如何用passport.jslogin用户testingsail.js控制器

我尝试unit testing我的sail.js控制器,要求用户login。我目前的testing是:

var request = require('supertest'), // I try to use 'superagent', this changes nothing user = request.agent; describe('SomeController', function() { // login user first of all before(function(done) { user(sails.hooks.http.app) .post('/user/login') .send({username: 'hellocat', password: '123456789'}) // request works well by itself, // it does not return error and return normal response. .end(function (err, res) { // then I try to save cookies of logged in user to it agent user(sails.hooks.http.app).saveCookies(res); done(); }); }); // let test something it('must return "ok" when user is logged in or "wtf" if opposite', function(done) { user(sails.hooks.http.app) .get('/user/me') .end(function(err, res) { console.log(res.body); // no need to expect something, user is not logged in ( done(); }); }); }); 

在hook工作正常之前,我的用户在请求结束时login。 但在testing中不是。 在所有testing开始运行之前,我提起帆应用程序。 类似的testing,不需要授权工作。 我猜这个错误可能是在保存cookie或错误理解如何使用超级代理。 我究竟做错了什么?

那么,我终于find了我的错误。 request.agent函数不返回单例。 所以每个user(sails.hooks.http.app)调用实际上是新的代理和新的用户。 为了使这个testing片段工作,我应该做这样的事情

 var request = require('supertest'), agent = request.agent; 

并且在描述部分一次调用代理:

 describe('SomeController', function() { var user; before(function(done) { user = agent(sails.hooks.http.app); user .post('/user/login') // ... // ...