web-dev-qa-db-ja.com

コンストラクターのブランチはカバーされていません

Jasmineを使用して単体テストを作成していますが、対象となるブランチについて質問があります。

以下に示すように、コード部分がブランチがカバーされていないことを示している理由を誰かが知っていますか?

enter image description here

これはユニットテストです:

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();
  });
}
10
Marcio M.

プロジェクトをangular 4にアップグレードしてから数か月間、同じ問題が発生しました。残念ながら、これはangular-cliバージョン1とangular4のバグです。

このバグはすでに angular-cli プロジェクトに記録されています: Test-coverageによると、カバレッジは100%ではありませんが、実際にはそうです!#5871 。残念ながら、現時点では、この問題は未解決のままです。

これは、ログに記録された問題のスナップショットであり、質問している問題と一致します。

enter image description here

7
Juan

この問題に直面していて、それでも100%のブランチカバレッジに到達したい場合は、少なくとも回避策があります( https://github.com/angular/angular-cli/issues/5526#issuecommentを参照) -324429322 )。

クラスのエクスポート後に/* istanbul ignore next */を追加するだけです(改行なし):

export class InternalComponent {
    constructor(private authService: any) { 
    }
} /* istanbul ignore next */
1
Marc Scheib

Angular 2+プロジェクトの場合、Angular CLI 1.5にアップグレードすると、これが修正されるようになりました。

GitHubの投稿: https://github.com/angular/angular-cli/issues/5526