NodeJS超测访问会话对象
Posted
技术标签:
【中文标题】NodeJS超测访问会话对象【英文标题】:NodeJS supertest access to session object 【发布时间】:2013-12-11 09:29:05 【问题描述】:我正在使用 supertest 测试我的 Node.js 应用程序。在我的控制器中,我访问会话对象。为了发出有效的请求,这个会话对象需要填充一些数据。
控制器
// determine whether it is user's own profile or not
var ownProfile = userId == req.session.user._id ? true : false;
测试
it('profile', function (done)
testUserOne.save(function(error, user)
request
.agent(server)
.get('/profile?userId=' + user._id)
.expect('Content-Type', /html/)
.expect(200)
.expect(/Profile/)
.end(done);
)
);
问题
如何模拟 req/session 对象?
【问题讨论】:
【参考方案1】:仅用作子应用,并在父应用调用您的 authenticated():
var mockApp = express();
mockApp.use(session);
mockApp.all('*', function(req, res, next)
//authenticated(req, res, next);
//OR
req.session.uid = 'mock uid';
next();
);
mockApp.use(app);
您的所有路由都将在匹配之前进行身份验证!
【讨论】:
有趣的选项。 mockApp.use(app) 的目的是什么?难道我们不用将mockApp链接到主快递吗? @nishantmockApp.use(app)
实际上是用原始应用程序扩展了 mockApp,因此将会话覆盖处理程序插入到原始应用程序中。值得注意的是,应该在测试中使用mockApp
:request(mockApp)…
。感谢您指出这一点!
能否添加会话的实例化?【参考方案2】:
这个新的库应该可以解决问题:
https://github.com/rjz/supertest-session您还可以查看superagent,它是supertest 的一部分。这是一个很好的教程:
http://jaketrent.com/post/authenticated-supertest-tests/不想要另一个库?试试这个...
https://gist.github.com/joaoneto/5152248【讨论】:
请注意 Jake Trent 教程已过时,因为saveCookies
已被弃用:github.com/visionmedia/superagent/issues/1014以上是关于NodeJS超测访问会话对象的主要内容,如果未能解决你的问题,请参考以下文章