【问题标题】:Test a private method with HTTP request in Angular在 Angular 中使用 HTTP 请求测试私有方法
【发布时间】:2020-03-12 21:56:35
【问题描述】:

我的任务是为其他人实现的某些组件执行测试。我尝试不对他们的代码进行更改,但我发现这很难,因为他们将所有方法都设为私有,而且他们发出 HTTP 请求并在方法内订阅它,这让我很难弄清楚最好的测试场景是什么.这是一个例子:

private getProfile() {
    this.http
      .get('go/profile/get', {withCredentials: true})
      .subscribe((profile: Profile) => {
        this.user.profile = profile;
        this.updateLineMsgs();
      });
  }

总结一下:

  1. 我可以测试私有方法还是必须更改其范围?

  2. 这种情况下最好的测试场景是什么?

【问题讨论】:

  • 1.不,但您可以使用该私有方法测试组件。 2. 将组件测试为黑盒,通过模拟 http 后端,如 HttpClient 指南中所述:angular.io/guide/http#testing-http-requests
  • 测试副作用 - 大概更新方法有什么作用?您还可以测试用户属性是否已更新。
  • @JBNizet 1- 是的,但我不知道如何测试私有方法,我使用了测试平台,但我仍然无法从规范文件中访问它。
  • 您不需要访问它,只需模拟调用它的条件(例如单击按钮)。

标签: angular httprequest angular-test


【解决方案1】:

您可以查看this answerthis answer 如何测试私有方法。

在我看来,你不应该测试私有方法,因为私有方法是实现细节,这些方法被封装在你的类/API 中。私有方法是一种工具,可帮助为公共方法(API)创建所需的行为。避免为私有方法编写单元测试的一些原因:

  • 未来可以更改私有方法的实现。因此,您当前对私有方法的测试很脆弱,是否应该考虑重写它们
  • 单元测试用于测试代码的公共接口,因此当私有实现发生变化时,您可以运行测试并确保它对外部世界仍然有效。
  • 遵循“鸭子测试”:“如果它看起来像鸭子,像鸭子一样游泳,像鸭子一样嘎嘎叫,那么它很可能是鸭子。”。你只测试输出。

所以你需要测试公共方法,如果这些公共方法没问题,那么我们可以认为私有方法没问题。因此,您应该改为测试公共函数的最终结果。

【讨论】:

    猜你喜欢
    • 2018-12-20
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2021-09-29
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多