Как вызвать сервис с функцией SpyOn при выполнении Angular Unit Test - PullRequest
0 голосов
/ 14 марта 2020

У меня есть сервис, который возвращает объект пользователя. Служба использует свойство publi c, которое устанавливается из частного.

private privateProperty: BehaviorSubject<User | Me | null> = new BehaviorSubject(
    null
  );

public publicProperty: Observable<
    User | Me | null
  > = this.privateProperty.asObservable();

Запрос на обслуживание вызывается с помощью частного метода внутри моего компонента, и у меня возникают трудности с его обработкой в ​​модульном тесте. Я не уверен, как настроить мой тест так, чтобы он срабатывал в этом закрытом методе, и, таким образом, вызывал службу и устанавливал какое-то значение на определенное.

Это мой тест.

it('should set user oninit', ()=> {
    let me: Me | User;

    spyOn(userService, 'publicProperty').and.returnValue(of(userMock));

    component.ngOnInit();

    expect(userService.publicProperty).toHaveBeenCalled();
    expect(component.me).toBeDefined();

  });

Но при запуске теста я получаю этот неудавшийся результат:

ожидаем (шпион) .toHaveBeenCalled ()

Expected number of calls: >= 1
Received number of calls:    0

  61 |     component.ngOnInit();
  62 | 
> 63 |     expect(userService.publicProperty).toHaveBeenCalled();
     |                                      ^
  64 |     expect(component.me).toBeDefined();
  65 | 
  66 |   });

Я не уверен, что Я делаю не так, кто-нибудь получил это на работу раньше?

1 Ответ

0 голосов
/ 14 марта 2020

Если вам просто нужно убедиться, что приватный метод в вашем компоненте присваивает значение publicProperty в сервисе, вы можете просто использовать обычное ожидание с сервисом publicProperty

it('should set user oninit', ()=> {
    let me: Me | User;


    component.ngOnInit();

    expect(userService.publicProperty).toEqual(valueExpected);
    expect(component.me).toBeDefined();

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