Angular 如何使用“测试私有方法/声明”;“测试库”;

Angular 如何使用“测试私有方法/声明”;“测试库”;,angular,angular-test,angular-testing-library,testing-library,Angular,Angular Test,Angular Testing Library,Testing Library,有没有办法在angular中使用“测试库”框架测试私有方法或声明 这是我的密码: priave name = "somename" private setLang(url: string, fetch: boolean) { switch (url) { case '/SSB/mngt': this.SSB.Id = 'newSSb'; this.pageId = 'ManageEvent';

有没有办法在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);

  }

在spec文件中,private
name
声明和
setLang
方法都不可用。正确的处理方法是什么。似乎,除非我为我的两个私有声明编写测试用例,否则我无法实现100%的覆盖率。

我们不使用测试库测试私有方法,因为这些方法可能会更改,并且会无故中断您的测试。如果您想在这些行上覆盖代码,您必须通过HTML从外部对它们进行测试


这将确保如果实现细节随着时间的推移而改变,您的测试仍然会通过,并使您对所编写的代码充满信心。

您不会直接测试私有方法。通过它们的公共API进行测试。这不应该阻止您获得高水平的覆盖率,因为私有方法应该作为公共交互的结果被调用(如果不是,它们的意义是什么?),但是我的jest.js显示了错误,比如私有偏差存在的地方。这里我的
setLang
连接到routerI我不明白你想说什么。我在私有方法和声明下得到了
未覆盖的行?它们在您当前的测试期间是否被调用?给我一点时间,我很好。此问题与路由器事件有关,而不是与html有关。您能否显示/共享一个示例以测试
ngOnInit
-上的路由器事件?