【问题标题】:Using SignalR with AngularJS, how to write unit tests使用 SignalR 和 AngularJS,如何编写单元测试
【发布时间】:2015-01-13 09:22:43
【问题描述】:

我目前有一个使用 SignalR 获取数据并使用 Knockout 绑定到 DOM 的应用程序。该应用程序已经发展壮大,并且 Knockout 变得相当复杂和臃肿,所以我正在切换到 AngularJS 进行前端绑定。

但是,我关注的 Angular 教程似乎都使用 $http GET 从服务器获取数据。我真的很喜欢使用 SignalR 获取数据,因为我可以从服务器端代码返回纯对象、列表或字典,并将其发送到客户端,而无需进行字符串化或反序列化。

实现 SignalR 客户端方法可能很简单,但是如何编写单元测试来测试需要 SignalR 集线器连接的 Angular 控制器方法?

【问题讨论】:

  • 你所描述的很常见,一个应用程序开始,随着时间的推移而增长,并且内置的技术债务开始拖累。这就是重构的用武之地,在你的情况下是彻底切换到角度。一旦一个人对事物进行了足够的重构,他们就会开始学习“关注点分离”。我发现任何时候任何方法或函数的代码行数超过 10 行,它都可能试图做太多事情。每个方法或函数应该只做一件事。还要记住,包含远优于大而长的继承链。

标签: javascript angularjs unit-testing knockout.js signalr


【解决方案1】:

您的应用程序复杂且臃肿并不是淘汰赛的错误,您也可以使用 Angular 来实现这一点,只是说。同样与 SignalR 没有区别的是还需要反序列化 JSON。如果您不将状态从服务器推送到客户端,我看不出使用 SignalR 的原因,请查看 WebAPI

在动态语言中模拟外部调用非常容易

只是做(伪代码)

foo.functionname = function(params) {
   assert(1, params, "It should call server with params = 1");
}

【讨论】:

  • 但是使用 SignalR,我不必对我的对象进行序列化和反序列化,我只需在 Hub 类中返回该对象,它就会很好地传递给我的客户端方法。标准 GET 请求并非如此。
  • 您可以使用 jQuery 或其他库来做同样的事情,如果您只是想要该功能,则没有理由使用 SignalR。 SignalR 是一个发布/订阅框架,用于将消息从服​​务器直接推送到客户端
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 2018-10-22
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多