【问题标题】:How to test the private methods/declarations using "testing-library"如何使用“测试库”测试私有方法/声明
【发布时间】:2020-06-27 13:49:18
【问题描述】:

有没有办法在 Angular 中使用“测试库”框架来测试私有方法或声明?

这是我的代码:

priave name = "somename"
 private setLang(url: string, fetch: boolean) {
    switch (url) {
          case '/SSB/mngt':
              this.SSB.Id = 'newSSb';
              this.pageId = 'ManageEvent';
            break;
          case '/SSB/mngt/add':
            this.SSB.Id = 'newSSb';
            this.pageId = 'ManageEventAdd';
          break;
          case '/SSB/mngt/view':
            this.SSB.Id = 'newSSb';
            this.pageId = 'ManageEventView';
          break;
          case '/SSB/mngt/approve':
            this.SSB.Id = 'newSSb';
            this.pageId = 'ManageEventApprove';
          break;
          default:
            this.SSB.Id = 'setupConfig';
            this.pageId = 'ViewProgMgmt';
            break;
    }

    this.data = [];
    this.data.push(this.selectedLang);
    this.data.push(this.SSB.Id);
    this.data.push(this.pageId);
    this.data.push(fetch);
    this.langId.emit(this.data);

  }

私有name 声明和setLang 方法都不可用,有规范文件。什么是正确的处理方式。看来,除非我为我的两个私有声明编写测试用例,否则我无法达到 100% 的覆盖率。

【问题讨论】:

  • 你不直接测试私有方法。通过他们的公共 API 进行测试。这不应该阻止您获得高水平的覆盖率,因为私有方法应该作为公共交互的结果被调用(如果不是,它们的意义何在?)
  • 但我的 jest.js 显示错误,例如存在私人偏角的位置。这里我的setLang 连接到路由器
  • 我不明白你想说什么。
  • 我在私有方法和声明下得到uncovered lines
  • 根据什么? 是否在您当前进行的测试期间它们会被调用?给minimal reproducible example

标签: angular angular-test angular-testing-library testing-library


【解决方案1】:

我们不会使用测试库测试私有方法,因为这些方法可能会发生变化,并且会无缘无故地破坏您的测试。如果您想对这些行进行代码覆盖,则必须通过 HTML 从外部对其进行测试。

这将确保如果实现细节随时间发生变化,您的测试仍然可以通过,并让您对自己编写的代码充满信心。

【讨论】:

  • 我没事。这个问题与路由器事件有关,而不是 html。你能展示/分享一个样本来测试ngOnInit上的路由器事件吗?
猜你喜欢
  • 2015-03-13
  • 1970-01-01
  • 2014-02-09
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 2020-02-28
相关资源
最近更新 更多