как имитировать службу angular, чтобы возвращать разные результаты для разных тестов? - PullRequest
0 голосов
/ 09 июля 2020

Я хочу проверить, что метод loadResults() моего angular компонента всегда приводит к тому, что член loading становится ложным, независимо от того, была выдана ошибка или нет:

component:

constructor(private service: Service1) {
}
    
ngOnInit() {
    this.loadResults();
}

private loadResults(): void {
    this.service.getResults().subscribe(results => {
        this.results = results;
        this.loading = false;
    },
    error => this.loading = false);
   }
}

service:

getResults(): Observable<Result[]> {
  return this.http.get<Result[]>(`${this.API_ROOT}/results`);
}

test:

class MockService {
  getResults(): Observable<Result[]> {
    return Observable.of([]);
  }
}

describe('Component: ResultList', () => {

  let resultList;
  let service;


  beforeEach(() => {
    service = new MockService();
    resultList = new ResultListComponent(service);
  });


  it('loading always set to false after the loadResults method', () => {
    resultList.ngOnInit();
    expect(resultList.loading).toBeFalsy();
  });

});

Как я могу изменить этот код, чтобы создать второй тест, в котором тот же метод обслуживания (getResults) выдает ошибка http?

1 Ответ

0 голосов
/ 09 июля 2020

понял :)

it('loading should be set to false after error', () => {
    jest.spyOn(service, 'getResults').mockImplementation(() => {
        return throwError(new Error('error'));
    });
    resultList.ngOnInit();
    expect(resultList.loading).toBeFalsy();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...