Node.js针对特定于会话的中间件进行单元测试

时间:2012-04-17 01:28:13

标签: node.js cookies express

我正在编写一个依赖于连接中持久会话的中间件的单元测试。 (即connect-mongo)。

我想创建一个假会话,但似乎无法弄清楚如何。

我的浏览器中有一个connect.sid cookie,我假设它以某种加密方式与我的会话集合中的_id相关联。

这是我试过的:

我将cookieParser中间件和会话存储添加到服务器,然后使用以下请求将其发送到服务器(从chrome的开发工具面板复制密钥):

var jar = request.jar(),
    cookie = request.cookie('connect.sid=<REALLYLONGKEY>');
jar.add(cookie);
request({url : 'http://localhost:8585/',jar : jar},this.callback);

在服务器端正确设置了cookie,我已经验证会话正在运行。

然而,从cookie到会话的神奇转换并没有像我希望的那样发生 - 这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

只有存在具有该ID的会话时,才能在服务器上设置cookie。谁首先创建了会话?

我可以告诉你我在服务器上做了什么。我想创建模拟客户端的测试并将请求发送到服务器。我需要一种方法来验证客户端。我的服务器允许基于Google OAuth进行身份验证。但是,我不想在教导客户登录Google帐户方面遇到麻烦。

我的解决方案是实现一种替代登录我的服务器的方法 - 只使用用户名。此功能仅在测试期间启用,并禁用生产。我的测试客户现在可以毫无问题地登录。它们会在登录后收到cookie“connect.sid”,并在后续请求中将其发送回服务器。

我也使用request.jar()为我的请求创建一个cookie jar。但是,我应该注意,只有在同时模拟多个客户端并且每个客户端需要一个单独的cookie jar时才需要这样做。