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();
});
}
プロジェクトをangular 4にアップグレードしてから数か月間、同じ問題が発生しました。残念ながら、これはangular-cliバージョン1とangular4のバグです。
このバグはすでに angular-cli プロジェクトに記録されています: Test-coverageによると、カバレッジは100%ではありませんが、実際にはそうです!#5871 。残念ながら、現時点では、この問題は未解決のままです。
これは、ログに記録された問題のスナップショットであり、質問している問題と一致します。
この問題に直面していて、それでも100%のブランチカバレッジに到達したい場合は、少なくとも回避策があります( https://github.com/angular/angular-cli/issues/5526#issuecommentを参照) -324429322 )。
クラスのエクスポート後に/* istanbul ignore next */
を追加するだけです(改行なし):
export class InternalComponent {
constructor(private authService: any) {
}
} /* istanbul ignore next */
Angular 2+プロジェクトの場合、Angular CLI 1.5にアップグレードすると、これが修正されるようになりました。
GitHubの投稿: https://github.com/angular/angular-cli/issues/5526