3

我正在为依赖于连接中的持久会话的中间件编写单元测试。(即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 到 session 的神奇转换并没有像我希望的那样发生——正确的方法是什么?

4

1 回答 1

1

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

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

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

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

于 2012-11-05T19:24:30.213 回答