Angular тестирование: метод, возвращающий наблюдаемое, успешно протестирован, но тестовое покрытие все еще помечает его как непокрытый оператор - PullRequest
0 голосов
/ 28 января 2020

Я хочу проверить этот метод:

public getAll(): Observable<Array<Todo>> {
    return this.$http.get<Array<Todo>>('http://5def6a2502b2d90014e1b38a.mockapi.io/api/v1/todos/');
}

Я написал тест для этого метода:

it('should return array of todos', (done: DoneFn) => {
    const mockedValue = [new Todo('Test')];
    spyOn(service, 'getAll').and.returnValue(of(mockedValue));
    service.getAll().subscribe((value) => {
        expect(value).toBe(mockedValue);
        done();
    });
});

Когда я запускаю ng test, этот тест помечается как успешно, но покрытие кода все еще помечает его как открытый тест:

enter image description here

Почему? И как я могу это покрыть?

1 Ответ

1 голос
/ 28 января 2020

Вы издеваетесь над методом, который пытаетесь проверить. Вот почему покрытие говорит, что это не проверено.

В вашем тестовом примере вы только проверяете, что вы имитируете работу, но не то, что функция делает то, что вы ожидаете.

Вы не должны насмехаться getAll, а вместо этого насмехаться над http client.

Существует HttpClientTestingModule именно для этих случаев.

Вам потребуется включить этот модуль в свой TestBed

beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [YourServiceUnderTest],
      imports: [HttpClientTestingModule]
    });
});

с этой настройкой, вы можете написать такой тест:

  it('getAll', () => {
    const mockResponse: Todo[] = [new Todo(1)];
    const service = TestBed.get(YourServiceUnderTest);
    const httpTestingController = TestBed.get(HttpTestingController);

    service.getAll()
      .subscribe(data => {
        expect(data).toEqual(mockResponse);
      });

    const req = httpTestingController.expectOne('YOUR-URI-GOES-HERE');

    expect(req.request.method).toEqual('GET');

    req.flush(mockCourse);
  });

Может быть, посмотрите на эти статьи:

Проверка Http-запросов

Тестирование с HttpClient

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