【问题标题】:Not able to cover ngOnInit() in jasmine test case无法在 jasmine 测试用例中覆盖 ngOnInit()
【发布时间】:2018-11-04 22:10:12
【问题描述】:

我是 Angular 5 的 Jasmine 新手。

我正在尝试编写一个测试用例,但在我的覆盖率报告中,我总是得到 ngOnInit()t() 未被覆盖:

以下是我的规范文件,我将 null 传递给我的组件的构造函数,但实际上它需要一个服务:

  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,因为我当前的测试用例没有运行。菜鸟错误!

【问题讨论】:

    标签: angular angular5 karma-jasmine


    【解决方案1】:

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

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

    【讨论】:

    • 就叫它:yourcomponent.ngOnInit();
    • 我调用了它,但仍然无法覆盖 ngOnInit()
    • 好吧,它现在被覆盖了 - 甚至两次没有人知道是为了什么;)
    • 我试过了,结果还是一样,现在添加组件,请检查
    • 也许该测试没有运行。它现在显然被覆盖了。
    猜你喜欢
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2013-07-14
    • 2021-10-15
    • 1970-01-01
    • 2021-09-06
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多