SpyOn SideNav не находит данный метод

У меня есть боковое навигационное меню в моем тестовом проекте, и я хочу написать простой тест, чтобы проверить, что sidenav открывается ( переключается ), когда я нажимаю кнопку. Сам AppComponent ссылается на боковую панель через свою зависимую панель sidenavbar.

it('when button is clicked, sidenav appears', async(() => {
    const fixture = TestBed.createComponent(AppComponent);
    const component = fixture.componentInstance;
    let sidenav_button = fixture.debugElement.nativeElement.querySelector('button');
    fixture.detectChanges();
    expect(component.sidenavbar.opened).toBeFalsy();
    spyOn(component.sidenavbar, 'toggle');
    sidenav_button.click();
    fixture.whenStable().then(() => {
      fixture.detectChanges();
      expect(component.sidenavbar.toggle).toHaveBeenCalled();
  });

прямо сейчас говорится, что метод toggle () не существует, чтобы шпионить за ним. Я уверен, что это действительно так.

Всего 1 ответ


Может случиться так, что toggle частный, и за ним нельзя шпионить.

sidenavbar - это object внутри AppComponent , верно? Это не дочерний компонент?

Если бы я был тобой, я бы просто увидел, как изменилось opened свойство.

it('when button is clicked, sidenav appears', async(() => {
    const fixture = TestBed.createComponent(AppComponent);
    const component = fixture.componentInstance;
    let sidenav_button = fixture.debugElement.nativeElement.querySelector('button');
    fixture.detectChanges();
    expect(component.sidenavbar.opened).toBeFalsy();
    // spyOn(component.sidenavbar, 'toggle');
    sidenav_button.click();
    fixture.whenStable().then(() => {
      fixture.detectChanges();
      expect(component.sidenavbar.opened).toBeTruthy();
  });