我正在为依赖于连接中持久 session 的中间件编写单元测试。 (即 connect-mongo)。
我想创建一个假 session ,但似乎不知道如何操作。
我的浏览器中有一个 connect.sid cookie,我假设它以某种加密方式与我的 session 集合中的 _id 相关联。
这是我尝试过的:
我将 cookieParser 中间件和 session 存储添加到服务器,然后使用以下请求将其发送到服务器(从 chrome 的开发工具面板复制 key ):
var jar = request.jar(),
cookie = request.cookie('connect.sid=<REALLYLONGKEY>');
jar.add(cookie);
request({url : 'http://localhost:8585/',jar : jar},this.callback);
在服务器端正确设置了 cookie,并且我已验证 session 正常工作。
但是,从 cookie 到 session 的神奇转换并没有像我希望的那样发生 - 正确的方法是什么?
最佳答案
仅当存在具有该 ID 的 session 时,在服务器上设置 cookie 才有效。谁首先创建了 session ?
我可以告诉你我在我的服务器上做了什么。我想创建模拟客户端并将请求发送到服务器的测试。我需要一种方法来验证客户端。我的服务器允许基于 Google OAuth 的身份验证。但是,我不想费心教客户登录 Google 帐户。
我的解决方案是实现一种替代方法来登录我的服务器——只使用用户名。此功能仅在测试期间启用,在生产中禁用。我的测试客户现在可以毫无问题地登录。他们在登录后收到 cookie“connect.sid”,并在后续请求中将其发送回服务器。
我也使用 request.jar() 为我的请求创建一个 cookie jar。但是,我应该注意,只有在您同时模拟多个客户端并且每个客户端都需要一个单独的 cookie jar 时才需要这样做。
关于特定于 session 的中间件的 Node.js 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10183906/