【发布时间】:2014-05-24 15:04:45
【问题描述】:
我曾尝试使用 sinon.js 对 Web 套接字应用程序进行单元测试,
sinon github 上的一位用户这样做了,但我无法理解它如何帮助单元测试 websocket 应用程序以验证接收到的发送到假服务器的数据。
var dummySocket = { send : sinon.spy()};
sinon.stub(window, 'WebSocket').returns(dummySocket);
dummySocket = new WebSocket('ws://html5rocks.websocket.org/echo');
dummySocket.onopen();
dummySocket.onmessage(JSON.stringify({ hello : 'from server' }));
// You can assert whether your code sent something to the server like this:
sinon.assert.calledWith(dummySocket.send, '{"the client":"says hi"}');
我的问题是
- 我怎样才能从假服务器接收到之前发送到服务器的相同数据。
- 如何使用
send伪造套接字对象的方法向伪造服务器发送数据(例如:-socket.send())? - 如何从
dummySocket.onmessage = function (msg){}上的服务器获取数据
使用 sinon.js,我无法通过分别使用 useFakeXMLHttpRequest() 来创建假的 websocket 对象,例如假 XMLHttpRequest 和 server和fakeServer.create()
在 sinon.js 上有什么流程可以实现吗?
【问题讨论】:
-
github 用户提出了一些建议,并明确表示他不知道它是否有效(提示:它不起作用)。
-
你有没有想过这个问题?如果是这样,请发布您的发现
-
我不知道这是否对您有所帮助,但我编写了一个简单的 npm 模块,用作 socket.io 服务器的包装器。在测试这个module 时,我没有使用sinon,而是使用socket.io Client 来发送/接收数据以进行测试。如果这是您需要的,我可以在答案中详细说明我的方法。
-
您可能想看看模拟套接字,它似乎可以满足您的需求:github.com/thoov/mock-socket
-
你可以用一个假的
XMLHttpRequest来模仿Socket请求,当它返回时调用onmessage。但这不会测试实际的网络套接字连接,而是测试网络套接字流。因此,如果您想测试实际连接,@MichaelBleigh 建议的方法可能会奏效。
标签: javascript sockets unit-testing websocket sinon