javascript - 如何对网络套接字进行单元测试 - JavaScript

标签 javascript unit-testing websocket

我想测试使用 sockjs 实现的网络套接字.

   var sock = new SockJS('http://mydomain.com/my_prefix');
   sock.onopen = function() {
       console.log('open');
   };
   sock.onmessage = function(e) {
       console.log('message', e.data);
   };
   sock.onclose = function() {
       console.log('close');
   };

我目视了一下,只找到了这个 article .这还不够好,因为它是在建立实际联系而不是伪造联系。

我也试过,但只找到一个未回答的问题 here .

有人建议使用 sinonjs,但我找不到合适的例子。

如果有人能阐明这个主题,我将不胜感激。

最佳答案

当您想对访问外部资源的功能进行单元测试时,例如您的 websocket 服务器,通常的方法是使用模拟对象来表示外部资源。模拟对象是一个看起来和行为都像外部资源的对象,但实际上并不访问它。此外,它还可以具有日志记录功能,如果测试代码的行为符合预期,它可以向测试代码报告。

在您的情况下,您将创建一个模拟 SockJS 对象,该对象具有普通 SockJS 对象的所有相关属性和方法,但其实现实际上并不联系服务器。它仅记录方法调用并返回现有服务器将发送的预期响应。

然后你会重构你想要测试的代码,这样它就不会自己创建套接字,而是从外部获取一个套接字对象(这叫做“dependency injection”,这是编写单元的一个重要习语-可测试的代码)。

在您的真实代码中,您分配了一个真实的 SockJS 对象。但是在你的单元测试中,你分配了你的模拟对象。调用测试方法后,您可以检查模拟对象以检查该单元是否将预期数据发送到服务器。

关于javascript - 如何对网络套接字进行单元测试 - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19268954/

相关文章:

javascript - 如何使用jquery更改html元素

javascript - 只打印 <div id ="printarea"></div>?

javascript - 在innerHTML中注入(inject)javascript是不应该起作用的,那么为什么它在这里起作用呢?

c# - 我可以将它与字节一起用于其他类型的值/对象吗?

unit-testing - 您使用哪些工具/库对您的 PL/PgSQL 进行单元测试

java - 在 Spring Boot 应用程序中使用 Java Websocket API

javascript - jquery 的 CORS 错误

php - 依赖 hell ——如何将依赖传递给深度嵌套的对象?

docker - 如何使用Kubernetes和websocket做多人在线游戏?

webview - openjdk/openjfx是否完全支持WebView(WebSockets)?