Значение доступа внутри финализированной трубы из теста - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть компонент:

isLoading: boolean;
users: User[];
test: number = 1;

ngOnInit() {
  this.isLoading = true;
  this.userService.getUsers()
      .pipe(
        finalize(() => {
          // Disable loading when complete
          this.isLoading = false;
          this.test = 5;
        })
      )
  .subscribe(results => {this.users = results})
}

И у меня есть тест для него (.spec.ts)

    it('should be 5 after ngOnInit', () => {
      component.ngOnInit();
      expect(component.test).toBe(5);
    });

Я получаю ошибку для теста 'Ожидается, что 1 будет 5«. Почему возникает эта ошибка, если я читаю значение после ngOnInit, .finalize игнорируется? Как получить значение из блока .finalize. fixture.detectChanges () тоже не помогает.

1 Ответ

1 голос
/ 30 сентября 2019

Это можно проверить следующим образом:

it('should set test value to 5', () => {
        const userService= TestBed.get(UserService);

        userService.getUsers()
            .pipe(
                finalize(() => {
                    expect(component.test).toEqual(5);
                } )
            )
    });

Я использовал макет для службы:

class MockUserService {
    getUsers(): Observable<number> {
        return of(1, 2, 3);
    }
}

И в configureTestingModule

            {provide: UserService , useValue: new MockUserService ()}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...