在我的Jasmine测试用例中无法覆盖ngOnit

时间:2018-05-25 13:31:07

标签: angular angular5 karma-jasmine

我是Jasmine for Angular 5的新手。

我正在尝试编写一个测试用例,但在我的覆盖率报告中,我总是得到ngOnit()未涵盖: enter image description here

以下是我的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错误!

1 个答案:

答案 0 :(得分:3)

您必须手动调用ngOnInit(),因为测试期间没有生命周期。那是故意的。

没有生命周期=没有调用生命周期钩子方法。 ngOnInit就是其中之一。