Как проверить, вызывается ли сервис из компонента в угловых - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть компонент, который при инициализации вызывает метод getAllUsers (), а getAllUsers () вызывает метод getAllUsersApi из моего сервиса.Я хочу проверить, действительно ли оба вызова сделаны.

Вот некоторые фрагменты из моего кода:

test.component.ts

ngOnInit(){
  this.getAllUsers();
}
getAllUsers(){
   this.userService.getAllUsersApi('');
}

test.service.ts

getAllUsersApi(){
   return this.http.get('api/endpoint')
}

test.service.spec.ts

it('should call getAllUsers method on init'){
  spyOn(userService, 'getAllUsersApi');
  spyOn(component, 'getAllUsers');
  component.ngOnInit();
  expect(component.getAllUsers).toHaveBeenCalled();
  expect(userService.getAllUsersApi).toHaveBeenCalled(); // it fails here
}

Но здесь не получается: expect(userService.getAllUsersApi).toHaveBeenCalled();

Может кто-нибудь, пожалуйста, помогите мне, что я делаю неправильно.

1 Ответ

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

Причина, по которой ваш тест не пройден, заключается в том, что шпион компонента componentSpy фактически заменяет вашу функцию getAllUsers в вашем компоненте пустой заглушкой, и, следовательно, ваш вызов getAllUsersApi никогда не произойдет.and.callThrough установит шпиона и убедится, что вызывается исходная функция.

Я бы проверил это так:

it('should call getAllUsers method on init', () => {
  // set up spies, could also call a fake method in case you don't want the API call to go through
  const userServiceSpy = spyOn(userService, 'getAllUsersApi').and.callThrough();
  const componentSpy = spyOn(component, 'getAllUsers').and.callThrough();

  // make sure they haven't been called yet
  expect(userServiceSpy).not.toHaveBeenCalled();
  expect(componentSpy).not.toHaveBeenCalled();

  // depending on how your component is set up, fixture.detectChanges() might be enough
  component.ngOnInit();

  expect(userServiceSpy).toHaveBeenCalledTimes(1);
  expect(componentSpy).toHaveBeenCalledTimes(1);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...