未涵盖构造函数上的分支

Posted

技术标签:

【中文标题】未涵盖构造函数上的分支【英文标题】:Branches on constructor not covered 【发布时间】:2017-08-30 03:54:33 【问题描述】:

我正在使用 Jasmine 创建我的单元测试,我对所涵盖的分支有疑问。

有谁知道为什么代码部分显示没有覆盖分支,如下所示?

这是单元测试:

describe('MyComponent', () => 
  let component: MyComponent;
  let fixture: ComponentFixture<MyComponent>;
  let myService: MyService;

  beforeEach(async(() => 
    TestBed.configureTestingModule(
      declarations: [ MyComponent ],
      imports: [ MaterializeModule, FormsModule, ReactiveFormsModule, HttpModule ],
      providers: [
        MyService,
        FormBuilder
      ]
    )
    .compileComponents();
  ));

  beforeEach(() => 
    fixture = TestBed.createComponent(MyComponent);
    component = fixture.componentInstance;
    slotsService = TestBed.get(MyService);
    fixture.detectChanges();
  );

  function updateForm(name, surname) 
    component.myForm.controls['name'].setValue(name);
    component.myForm.controls['surname'].setValue(name);
  

  it('should create', () => 
    expect(component).toBeTruthy();
  );

【问题讨论】:

显示你的单元测试 【参考方案1】:

从我将项目升级到 angular 4 的那一刻起,几个月来我一直遇到同样的问题。不幸的是,这是 angular-cli 版本 1 和 angular 4 的错误。

此错误已记录在 angular-cli 项目中:Test-coverage says that coverage is not 100%, but it truly is! #5871。不幸的是,目前这个问题仍然悬而未决。

这是该已记录问题的快照,与您询问的问题相符:

【讨论】:

我也面临同样的问题【参考方案2】:

如果您遇到此问题,但仍希望达到 100% 的分支覆盖率,那么至少有一个可用的解决方法(请参阅https://github.com/angular/angular-cli/issues/5526#issuecomment-324429322)。

只需在类导出后添加/* istanbul ignore next */(不带任何换行符):

export class InternalComponent 
    constructor(private authService: any)  
    
 /* istanbul ignore next */

【讨论】:

【参考方案3】:

对于 Angular 2+ 项目,如果您升级到 Angular CLI 1.5,这个问题现在已得到修复。

GitHub 帖子: https://github.com/angular/angular-cli/issues/5526

【讨论】:

给定的链接可能会解决问题。但是,如果链接被撤销,您的答案将变得毫无用处。所以请添加描述。【参考方案4】:

确保您的组件中没有任何未使用的导入成员。 我也面临同样的情况,我已经删除了未使用的导入,它开始为我工作。

【讨论】:

以上是关于未涵盖构造函数上的分支的主要内容,如果未能解决你的问题,请参考以下文章

在破坏调用期间从另一个线程未定义的行为调用对象上的方法?

如果子类未定义构造函数,是不是会调用父构造函数?

Flutter 6种构造函数详解

隐式超级构造函数 Person() 未定义。必须显式调用另一个构造函数?

Java错误:默认构造函数未定义隐式超级构造函数

爪哇。隐式超级构造函数 Employee() 未定义。必须显式调用另一个构造函数[重复]