如何对使用 cookie 的 socket.io 中间件进行单元测试

Posted

技术标签:

【中文标题】如何对使用 cookie 的 socket.io 中间件进行单元测试【英文标题】:How to unit test a socket.io middleware that works with cookies 【发布时间】:2015-11-01 12:54:54 【问题描述】:

我正在处理会话,并且我有一个解析请求 cookie 的中间件。

我正在对我的中间件进行单元测试,但我不知道如何处理这个(如何插入 cookie,以便我可以将其存在于中间件中)。

我尝试使用 supertest 库,在连接 socket.io 之前调用插入 cookie 的路由,但是当中间件被触发时 cookie 不在这里(这是有道理的,因为 cookie 存储在浏览器中,我的单元测试是用 mocha 启动的)。

你知道测试这种用例的方法吗?

【问题讨论】:

让我非常惊讶的是这个问题很少受到关注(没有投票(除了我的),没有答案,根本没有 cmets)。我遇到了完全相同的问题:需要测试 socket.io 与 cookie 的连接。这个任务对我来说似乎很常见,我几乎没有找到任何关于这个主题的内容。很少有人用这种方式使用socket.io?或者那些这样做的人,不关心测试?对我来说很奇怪.. 不是用cookies测试socket.io的解决方案,而是用passport.socketio(使用cookies)测试socket.io的解决方案:dmitryfrank.com/articles/socketio_passport_testing 【参考方案1】:

socket.io 库处理所有 cookie 解析,并经过广泛测试。您不需要测试通用 cookie 处理,而只需要您的特定中间件使用特定 cookie 执行特定操作。为此,您只需确保在测试期间传递给中间件的套接字对象的任何替代对象都具有 client.cookie 属性,然后确保您的输出符合您的预期。

【讨论】:

以上是关于如何对使用 cookie 的 socket.io 中间件进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 socket.io 解析 cookie

socket.io 身份验证与共享会话数据,io.use() 如何工作

Laravel与Socket.io Nodejs共享会话

与 socket.io 一起使用时 express-session 未设置会话 cookie

node.js / socket.io,cookies 只在本地工作

来自 socket.io 的新 cookie 值不起作用?