Как проверить, вызывается ли абонент в angular? - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть компонент, который подписывается на глобальное разветвление, созданное службой, и я sh проверил, действительно ли разветвление получено правильно. Итак, взглянув на код ниже, я sh проверю, вызывается ли eventStartFanout $ внутри TestableComponent.

Я знаю, что код на самом деле работает, выполняя "ручные тесты" = используя мои глаза, но я не знаю, как перевести его на автоматические тесты.

Минимизированный пример моей текущей проблемы;

service:

eventStartSubject = new Subject<any>();
eventStartFanout$ = this.eventStartSubject.asObservable();
function startEvent() {
  this.eventStartSubject.next();
}

testable-component:

ngOnInit() {
  this.unchanged = true;
  this.fanoutService.eventStartFanout$.subscribe(
    _ => {
      // Test that it reaches here when service triggers
      this.changeVariable();
    }
  );
}

// Extra (unneeded) function to potentially help testing
function changeVariable(){
  this.unchanged = false;
}

Моя текущая попытка теста:

beforeEach(() => {
    fixture = TestBed.createComponent(TestableComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

it('should do something when fanout happens', async(() => {
    const fanoutService: FanoutService = TestBed.get(FanoutService);
    component.unchanged = true;
    spyOn(component, 'changeVariable');
    // It should trigger the subscriber here and change component.unchanged
    fanoutService.startEvent();
    fixture.detectChanges();
    expect(component.unchanged).toBeFalsy();
  }));

1 Ответ

0 голосов
/ 12 февраля 2020

Это было проще, чем я думал. Решение состояло в том, чтобы использовать fakeAsync и tick() для имитации временного шага, в котором абонент мог вносить изменения, см.

it('should do something when fanout happens', fakeAsync(() => {
    const fanoutService: FanoutService = TestBed.get(FanoutService);
    component.unchanged = true;
    fanoutService.startEvent();
    tick();
    fixture.detectChanges();
    expect(component.unchanged).toBeFalsy();
  }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...