Карма / Жасмин: невозможно проверить сервисный метод, вызываемый внутри компонента в Angular 4 - PullRequest
0 голосов
/ 25 июня 2018

Я новичок в karma / jasmine и пытаюсь протестировать код, в котором метод компонента вызывает метод службы и ожидает возвращаемого значения.

Компонент
Вотнебольшой компонент, который я создал. isLoginRequired () вызывается в ngOnInit () , которая дополнительно выполняет this.service.checkAuthentication () .

export class AppComponent implements OnInit {
  public title = 'app';
  public showLoginBtn = true;

  constructor(private service: CustomService) {}

  ngOnInit() {
    localStorage.setItem('key', '12345');
    this.title = 'name changed';
    this.isLoginRequired();
  }

  isLoginRequired() {
    this.showLoginBtn = this.service.checkAuthentication();
  }
}

Сервис
Это пользовательский сервис, внутри которого находится метод checkAuthentication () .

@Injectable()
export class CustomService {

  constructor() { }

  checkAuthentication(): boolean {
    return !!localStorage.getItem('key');
  }
}

Спецификации
Thisэто файл спецификации, в котором я пишу примеры модульных тестов.Пожалуйста, обратитесь к контрольному примеру # 4 .

describe('App component testing', () => {

  let component: AppComponent;
  let service: CustomService;
  let fixture;

  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [
        AppComponent,
        CustomPipe,
        CustomDirective
      ],
      providers: [
        CustomService
      ]
    }).compileComponents();
    fixture = TestBed.createComponent(AppComponent);
    component = fixture.debugElement.componentInstance;
    service = TestBed.get(CustomService);
  });

  // test case #1
  it('component creation', () => {
    expect(component).toBeTruthy();
  });

  // test case #2
  it('has title "app"', () => {
    expect(component.title).toBe('app');
  });

  // test case #3
  it('isLoginRequired is triggered', () => {
    spyOn(component, 'isLoginRequired');
    component.ngOnInit();
    expect(component.isLoginRequired).toHaveBeenCalled();
  });

  // test case #4
  it('service.checkAuthentication is triggered', () => {
    spyOn(component, 'isLoginRequired');
    spyOn(service, 'checkAuthentication');
    component.ngOnInit();
    expect(component.isLoginRequired).toBeTruthy();
    expect(service.checkAuthentication).toHaveBeenCalled();
  });
});

Ошибки

Error: Expected spy checkAuthentication to have been called.

Мне действительно нужна помощь здесь.Заранее спасибо!

...