NodeJS:如何为测试服务器创建一个假的 tcp 套接字

Posted

技术标签:

【中文标题】NodeJS:如何为测试服务器创建一个假的 tcp 套接字【英文标题】:NodeJS: How can I create a fake tcp socket for testing servers 【发布时间】:2015-06-15 02:29:10 【问题描述】:

我正在尝试对我的服务器代码(非 http、自定义协议)进行单元测试。我需要创建一个模拟双工套接字,我可以异步发送消息并从中接收消息。

我在从事件流 readArray 和 writeArray 创建双工流方面取得了一些成功,但 readArray 需要预先准备好数据,并且 writeArray 在流结束之前不会触发。我需要随着时间的推移进行测试。理想的解决方案是将两个双工套接字链接在一起。

是否有任何现有的解决方案?我宁愿不必求助于初始化一个实际的服务器来测试它。

【问题讨论】:

node-mitm 可以帮到你。 node-mitm 用于捕获传出请求。我正在尝试模拟传入请求。 【参考方案1】:

Node Mitm 实际上可以做到这一点。它不仅可以拦截和模拟 HTTP,还可以拦截和模拟任何 TCP 连接。

mitm.on("connection", function(socket)  socket.write("Hello back!") )

var socket = Net.connect(22, "example.org")
socket.write("Hello!")
socket.setEncoding("utf8")
socket.read() // => "Hello back!"

【讨论】:

我不想拦截传入的连接,我根本不想拦截任何东西。我想创建一个模拟 tcp 连接以传递给我的连接处理程序(您提供给 net.createServer 的函数)和其他函数,然后我可以以可测试的方式进行通信,而无需启动实际的服务器。 那你可能想看看这个:https://gist.github.com/FGRibreau/7284395 是的,我在搜索中发现了这一点。它不是管道式的,这使得它无法用于我的测试用例。我需要一个工作流,而不仅仅是一个模拟,而且我对流 api 的了解还不够,无法让它满足我的需要。我真正想要的只是两个相互连接的双工流,但我不知道如何使它工作。

以上是关于NodeJS:如何为测试服务器创建一个假的 tcp 套接字的主要内容,如果未能解决你的问题,请参考以下文章

如何为生产准备 nodejs?

如何为Chrome的NodeJS专用DevTools添加扩展

如何为 DeadLetter Kafka 创建测试

如何为 nodejs Express 服务器启用 CORS?

nodeJS之TCP模块net

nodeJS之TCP模块net