我是Jasmine for Angular 5的新手。
我正在尝试编写一个测试用例,但在我的覆盖率报告中,我总是得到ngOnit()未涵盖:
以下是我的spec规范文件,我将null传递给我的组件的Constructor,但实际上它需要一个服务:
let component: LoginPageHeaderComponent;
let fixture: ComponentFixture<LoginPageHeaderComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ LoginPageHeaderComponent ],
providers: [ ServerBindingService ],
imports: [ HttpClientTestingModule]
})
.compileComponents();
component = new LoginPageHeaderComponent(null);
}));
it('Should initialize all variables ', async(() => {
component.ngOnInit();
const a = component.isNetworkCallFinsihed;
const b = component.allLeftHeaderOptions$;
const c = component.allRightHeaderOptions$;
component.ngOnInit();
fixture.detectChanges();
expect (a).toBeTruthy() ;
}));
请让我知道我错过了什么,我应该在这里添加。
修改
添加组件
import { ServerBindingService } from './../server-binding.service';
import { Component, OnInit, NgModule } from '@angular/core';
import { Observable } from 'rxjs/Observable';
@NgModule({
})
@Component({
selector: 'app-login-page-header',
templateUrl: './login-page-header.component.html',
styleUrls: ['./login-page-header.component.css']
})
export class LoginPageHeaderComponent implements OnInit {
allLeftHeaderOptions$: Observable<any>;
allRightHeaderOptions$: Observable<any>;
isNetworkCallFinsihed: Observable<boolean>;
constructor(private serverBindingService: ServerBindingService) { }
ngOnInit() {
console.log('called');
this.allLeftHeaderOptions$ = this.serverBindingService.leftHeaderLinks$;
this.allRightHeaderOptions$ = this.serverBindingService.rightHeaderLinks$;
this.isNetworkCallFinsihed = this.serverBindingService.isNetworkCallFinished$;
}
}
解决方案 我在其他测试用例上使用了fdescribe,因为我目前的测试用例没有运行。 Noob错误!
答案 0 :(得分:3)
您必须手动调用ngOnInit()
,因为测试期间没有生命周期。那是故意的。
没有生命周期=没有调用生命周期钩子方法。 ngOnInit
就是其中之一。