Как проверить подписку с простым предметом в сервисе - PullRequest
0 голосов
/ 08 сентября 2018

Я хочу протестировать компонент, у которого есть подписка на тему в сервисе.

Компонент подписывается:

let x: string[] = [];

public ngAfterViewInit(): void {
  this.subscription = this.service.observer$.subscribe((data: any) => {
    this.x = data.value;
    ...
  }
}

Сервис имеет свойство Subject:

public observer$: Subject<any>;

В тестовом примере я пытаюсь настроить это следующим образом:

beforeEach(() => {
    fixture = TestBed.createComponent(Component);
    component = fixture.componentInstance;
    service = fixture.debugElement.injector.get(Service);
    fixture.detectChanges();
  });

it('should get a subscription event', () => {
    const response: any[] = [];
    service.observer$ = new Subject<any>();
    service.observer$.next(['some content']);

    fixture.detectChanges();

    expect(component.x.length).toBeGreaterThan(0);

  });

Это не работает. х остается пустым.

Может кто-нибудь предоставить правильный способ проверить это? Я видел несколько примеров, где сервис предоставляет метод для наблюдателя.new (), когда тестировщик следит за этим. Но нет примера, как заставить это работать.

1 Ответ

0 голосов
/ 08 сентября 2018

AfterViewInit только запускает единицы при инициализации. Поэтому ваш второй fixture.detectChanges() не запускает его снова. Вам необходимо удалить fixture.detectChanges() в beforeEach

как-то так

beforeEach(() => {
    fixture = TestBed.createComponent(Component);
    component = fixture.componentInstance;
    service = fixture.debugElement.injector.get(Service);
  });

it('should get a subscription event', () => {
    const response: any[] = [];
    service.observer$ = new Subject<any>();
    fixture.detectChanges();

    service.observer$.next(['some content']);
    expect(component.x.length).toBeGreaterThan(0);

  });
...