首页 > 解决方案 > 使用 Angular 和 Jasmine/Karma 的私有方法进行测试和代码覆盖

问题描述

所以,我在我的按钮组件上得到了这些方法。

export class SidebarButtonComponent implements OnInit {

  private subscribeToRouter(): void {
    this.router.events.subscribe(route => {
      if (route instanceof NavigationEnd) {
        this.isSelected(route.urlAfterRedirects);
      }
    });
  }

  private isSelected(route: string): void {
    if (this.checkRoute(route)) {
      this.selected = true;
    } else {
      this.selected = false;
    }
  }

  private checkRoute(route: string): boolean {
    return route.includes(this.link);
  }

}

我知道我无法访问我的规范文件上的私有方法,但是 Angular 的代码覆盖率说我没有覆盖它:

59.09% 语句 13/22 37.5% 分支 3/8 42.86% 函数 3/7 52.63% 行 10/19

测试这些私有测试的最佳方法是什么,或者至少在代码覆盖率中忽略它们?

标签: angularjasminekarma-runnercode-coveragekarma-coverage

解决方案


typescript 中的访问修饰符仅在编译时使用。你不能像这样直接访问它们

component.privateMethod(); // not accessible 

但是您可以使用任何方式访问它们:

(component as any).privateMethod();

这是访问私有方法的一种解决方法,否则您可以使用调用这些私有方法的方法对其进行测试。


推荐阅读