Доступ к локальной переменной метода в модульном тесте Angular с использованием Jasmine - PullRequest
0 голосов
/ 15 февраля 2019

Как мне получить доступ к переменной type внутри функции validate?Проблема в том, что code-covarage показывает, что type в if операторе не охватывается, и я не знаю, как я могу это охватить.

interface NotUnique {
    notUnique: boolean;
}

@Injectable()

export class CheckExists implements AsyncValidator {
    constructor(
      private http: HttpClient
    ) {}

    async validate(control: FormControl): Promise<NotUnique> {
        try {
            if (!control || !control.parent) {
                return;
            }
            const value: string = control.value;
            const type = value.includes('@') ? 'email' : 'username';
            if (type) {
              const res = await this.http.post('/users/exists', {field: type, value: value}).toPromise();
              if (!(res as ExistsResponse).exists) {
                  return null;
              }
              return { notUnique: true };
            }
        } catch (err) {
            return null;
        }
    }
}

upd: изображение screenshot of code-coverage

1 Ответ

0 голосов
/ 15 февраля 2019

Если покрытие кода не покрывает if(type), это означает, что ваш тест всегда возвращается из:

if (!control || !control.parent) {
   return;
}

В вашем модульном тесте вы должны заполнить тестовые данные таким образом, чтобы они доходили доif (type) заявление.Это произойдет, если вы убедитесь, что переменная control содержит правильные данные и содержит данные также в control.value.

...