gpt4 book ai didi

javascript - Controller <-> 服务交互和单元测试 : Am I doing this wrong?

转载 作者:行者123 更新时间:2023-11-28 15:49:04 25 4
gpt4 key购买 nike

我正在构建一个 AngularJS 应用程序,我希望它是尊重的或最佳实践。因此,当我必须调用外部 $resource$http 请求时,我会在外部 Service/Factory 中执行此操作。我的问题是我不知道将服务的返回值检索到调用 Controller 的最佳方法是什么。

目前,我所做的事情如下:

  1. Controller 调用服务
  2. 服务执行$http调用并检查 promise
  3. 如果 Promise 成功,Service $broadcast 会返回一个带有返回对象的事件。
  4. Controller 捕获该事件并执行操作。

它工作得很好,允许我在不同的请求后使用相同的事件(例如:在讨论中,检索所有消息后并在自己发布消息后,调用相同的事件“要显示的新消息”)

.

但我最终决定在我的应用程序中设置测试流程(迟做总比不做好),并且我意识到我可能会做错。

--> 对我的 Controller 进行单元测试时,我想模拟一些服务以返回给定值。但是,当我的 Controller 调用 Services 时,它不会返回任何内容(它们会触发事件),我认为这将非常困难且不自然检查服务“返回”值。 (我总是可以检查服务是否已被调用,但不能检查结果)。

.

您认为我是否犯了误解错误?我考虑在调用服务时将 promise 直接放入 Controller 中,这是一个好的(更好?)的方法吗?

我知道每个应用程序都有自己的逻辑,但我认为在 AngularJS 中,“工作”逻辑(保留模块化和可测试性)的数量特别限制于某些选择集,并且最好实践。

如有任何建议,我们将不胜感激。

最佳答案

没有看到你的代码,我就有了我的想法:

您的 Controller 可以收到该 promise 并执行其需要执行的操作。没有真正需要广播任何内容。您的服务调用 $http 并返回 promise 。当 $http promise 得到解决时,您的 Controller 将知道并可以执行您需要执行的操作。

在不返回任何内容的服务中测试函数不是问题,这就是 spyOn 的问题。您可以检查该函数是否已被调用,这对于您的 Controller 来说应该足够了。您实际上并不关心服务中发生了什么,您关心的是您的 Controller (当然是在测试 Controller 中)。

关于javascript - Controller <-> 服务交互和单元测试 : Am I doing this wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21217664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com