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

У меня проблема с тестированием жасмина, я не могу проверить условно, если.когда я бегу в сонаркубе, просто это условно не могу обнаружить.

это мой код:

login() {
    this.submitted = true;
    this.isLoading = true;

        if (this.loginForm.valid) {
          this.authenticationService
            .login(this.f.username.value, this.f.password.value)
            .pipe(finalize(() => {
              this.loginForm.markAsPristine();
              this.isLoading = false;
            }))
            .subscribe(credentials => {
              this.router.navigate(['/'], { replaceUrl: true });
            }, error => {
              this.error = error;
            });
          this.isLoading = false;
        }
      }

это мой код тестирования:

test('testing conditional if', () => {
    component.loginForm.controls['username'].setValue('admin');
    component.loginForm.controls['password'].setValue('12345678');
    expect(component.loginForm.valid).toBeTruthy();
    spyOn(authenticationService, 'login').and
      .returnValue(component.loginForm.markAsPristine());
    expect(component.login().loginForm.isLoading).toBeFalsy();
    component.login();
  });

помогите мне, ребята, решить мою проблему, я ищу на каждом сайте, но не могурешить эту проблему.спасибо за ваше внимание и ваше решение.

1 Ответ

0 голосов
/ 07 декабря 2018

Подумайте, проблема в spyOn(authenticationService, 'login').and .returnValue(component.loginForm.markAsPristine()); Если вы шпионите за ним и возвращаете значение, вы по сути его издеваетесь.Следовательно, функция будет заглушена и просто вернет результат component.loginForm.markAsPristine() Из Жасминовой документации :

У Жасмин есть тестовые двойные функции, называемые шпионами.Шпион может заблокировать любую функцию и отследить вызовы к ней и все аргументы.

Поскольку вы хотите, чтобы функция выполнялась для SonarCube, но все еще следите за целью отслеживания вызовов, вы должны использоватьcallThrough

spyOn(authenticationService, 'login').and.callThrough(); Из документов:

Соединяя шпиона с and.callThrough, шпион по-прежнему будет отслеживать все вызовы, но в дополнение он будет делегироватьфактическая реализация.

Теперь это должно быть зарегистрировано с помощью сонарного куба, так как код будет выполняться, и если вы установите this.loginForm.valid на true, то if будет выполняться, а когда установлено значение falseelse часть блока выполнит

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