对私有变量进行角度测试spyOn

时间:2018-01-18 10:05:44

标签: angular karma-jasmine angular-testing

如何测试私有变量方法的调用? 我必须在调用ngOnDestroy时测试unsubscribe方法的调用。

有我的代码

if df.loc[i,'DateStart']== df.loc[i-1,'DateEnd']:
    df.loc[i, "EditDTS"]= df.loc[i-1, "DateStart"].dt.round('30T')

有我的测试代码

import { Component, OnInit } from '@angular/core';
import { Subscription } from 'rxjs/Subscription';
import { LoaderService } from '@core/components/loaders/services/loader.service';

@Component({
  selector: 'loader-mask',
  templateUrl: './loader-mask.component.html',
  styleUrls: ['./loader-mask.component.css']
})

export class LoaderMaskComponent implements OnInit {

  show = false;
  private subscription: Subscription;

  constructor(private loaderService: LoaderService) { }

  ngOnInit() {
    this.subscription = this.loaderService.loaderState
      .subscribe((state: boolean) => {        
        this.show = state;
      });
  }

  ngOnDestroy() {    
    if (this.subscription)
      this.subscription.unsubscribe();
    }
}

存在问题:

it('should destroy the subscription when destroying', () => {
    const spyUnSubscribe = spyOn(component['subscription'], 'unsubscribe').and.callThrough();
    component.ngOnDestroy();  
    expect(spyUnSubscribe).toHaveBeenCalled();  
    expect(component['subscription']).toBeUndefined();
  });

1 个答案:

答案 0 :(得分:0)

实际上类似的东西对我有用

spyOn(loginComponent['loaderSubscription'], 'unsubscribe');
loginComponent.ngOnDestroy();
expect(loginComponent['loaderSubscription'].unsubscribe).toHaveBeenCalled();