特定于 session 的中间件的 Node.js 单元测试

标签 node.js cookies express

我正在为依赖于连接中持久 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/

相关文章:

javascript - 为 promise 链导出 Express 路由方法的最佳方式?

node.js - ng2-test-seed 无法统计 - 没有这样的文件或目录

node.js - 使用 NPM 打包和分发 Bash 脚本,以便使用 npm install 全局安装到开发人员工作站的路径中

javascript - Ionic 启动 <项目> <模板> 卡住

node.js - 如何保持 Node 应用程序运行?

apache - 如果域匹配则设置 cookie

ruby-on-rails-3 - Rails中cookie的默认过期时间

c# - 如何在 C# 单元测试中向请求添加测试 cookie

node.js - 快速验证器将验证提取到单独的文件中

javascript - 从 EJS 中的日期对象切片时间戳 - Javascript、HTML、Node.js