как проверить подписку, функция работает в угловых? - PullRequest
0 голосов
/ 06 июня 2018

Я хочу выполнить модульный тест моей функции, которая присутствует в компоненте с использованием жасмина.Внутри этой функции присутствует subscribe функция. Я хочу проверить, что идентификатор функции пользователь получает ответ, чем он должен перейти к /user компоненту.

function

 onSubmit(val) {
    console.log(val);
    this.signupService.signUpHandler(val).subscribe((res:SignUpModel) => {
      if (res.token !== '') {
        this.router.navigate(['/users']);
      }
    }, (err) => {
      console.log(err);
    });
  }

вот мой код https://stackblitz.com/edit/angular-testing-kdb8ka?file=app%2Fapp.component.ts

Я могу проверить, что моя функция service вызывается при нажатии кнопки

 it('should called service method on button click', inject([SignupserviceService], (signupserviceService: SignupserviceService) => {
      spyOn(signupserviceService, 'signUpHandler');
      let button = fixture.nativeElement.querySelector('.btn')
      button.click();
      expect(signupserviceService.signUpHandler).toHaveBeenCalled();
    }));

Теперь я хочу проверить, получил ли я ответ от службычем я перенаправлю на \user компонент.

1 Ответ

0 голосов
/ 06 июня 2018

Вам просто нужно следить за функцией, на которую вы подписаны, и возвращать ответ, который вы ожидаете, в случае успеха:

it('should call the router's navigate method if a non-empty string token property is on the response', inject([SignupserviceService, Router], (signupserviceService: SignupserviceService, router: Router) => {
      spyOn(signupserviceService, 'signUpHandler').and.returnValue(Observable.of({token: 'not empty'}));
      spyOn(router, 'navigate');
      let button = fixture.nativeElement.querySelector('.btn');

      button.click();
      expect(router.navigate).toHaveBeenCalledWith(['/users']);
    })
);

Считайте это псевдокодом, поскольку я не проверял егоошибки, но вы поняли.

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