【问题标题】:Node.js unit testing for session-specific middleware针对特定于会话的中间件的 Node.js 单元测试
【发布时间】:2012-11-06 04:00:44
【问题描述】:

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

【问题讨论】:

    标签: node.js cookies express


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 2012-06-25
      • 1970-01-01
      相关资源
      最近更新 更多