Как подписаться и проверить Observable.of rx js Angular 9 - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь протестировать функцию, которая возвращает наблюдаемый rx js, но я не могу на него подписаться. Ни один из методов подписки, которые я пробовал, не работает.

"rxjs": "6.5.4","@angular/core": "9.0.1"

Функция, которую я пытаюсь проверить:

isNameValid(c: AbstractControl) {
    const searchResult = this.roles.filter((elem: any) => elem.name?.toLowerCase() === c.value?.toLowerCase());

    if (searchResult.length > 0) {
      c.get('name')?.setErrors({ nameTaken: true });
      return of({ matchError: 'nameTaken' });
    }
    return of(true);
  }

test:

it('should return invalid error if supplied name is taken', () => {
    const nameControl = new FormControl(mock[0].name);
    const isValid = component.isNameValid(nameControl);
    isValid.subscribe
      ({
        next: (result: any) => {
        console.log(result);
        },
        error: (err: any) => {
        console.log(err);
        },
        complete: () => {
        console.log('complete');
        }
        });
  });

Каков правильный синтаксис подписки на наблюдаемое, возвращаемое isNameValid? Прямо сейчас, с вставленным синтаксисом (или любым другим, что я пробовал) я не могу получить безошибочный способ подписки.

Должен ли я написать тест по-другому?

Ошибка, которую я получаю это:

Expected 2-3 arguments, but got 1.ts(2554)
Observable.d.ts(51, 39): An argument for 'error' was not provided.

Я также пытался:

isValid.subscribe(response => {console.log(response}), который дает ту же ошибку.

1 Ответ

1 голос
/ 16 марта 2020

Кажется, что некоторые проблемы с TypeScript не могут правильно определить возвращаемое значение.

Чтобы исправить проблему, пожалуйста, предоставьте определение типа явно для isNameValid метода:

isNameValid(c: AbstractControl): Observable<boolean | { matchError: string }> {
  // ...
}

Кстати Вы можете передать объект в subscribe(), это полностью допустимо.

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