Angular модульное тестирование NgOnInit - PullRequest
1 голос
/ 25 апреля 2020

Буду очень признателен, если вы поможете мне что-то понять. У меня есть компонент, который отображает некоторые данные. В ngOnInit () вызывается метод http-сервиса для получения данных с сервера. Вот код:

// isLogged - is get property
ngOnInit() {
  if (this.isLogged) {
    this.loadData();
 };
}

// Can't call in ngOnInit because this method is being used in other functions
loadData() {
  this.http.getData()
           .subscribe((result) => this.dataToDisplay = result);
}

get isLogged() {
    // this function checks for token in localStorage via custom token service. 
}

Я пишу тест для loadData ()

it('should load data', async(() => {
   component.loadData();
   fixture.whenStable().then( () => {
       fixture.detectChanges();
       expect(component.dataToDisplay).toEqual(mockData);
   });
});

И все работает как положено. Но мой вопрос: как мне проверить ngOnInit? Все, что делает этот метод, вызывает loadData. Но как проверить, что если свойство get возвращает true, метод вызывает? Я в замешательстве ((

1 Ответ

0 голосов
/ 25 апреля 2020

В этом случае вы издеваетесь над функцией this.loadData(), используя метод spyOn жасмина. В качестве утверждения вы ожидаете, что метод this.loadData() был вызван (или не был вызван на основе значения this.isLogged).

Чтобы ожидать, что вызов функции Жасмин имеет для шпионов функцию toHaveBeenCalled(). Некоторый пример может быть найден здесь . Я предполагаю, что this.isLogged может быть установлен непосредственно в тестах на fixture.componentInstance, поэтому его можно установить на желаемое значение для конкретного теста c.

Лог c из this.loadDate() проверяется отдельно, поэтому нет необходимости проверять это с ngOnInit().

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