Модульный тест HttpClient - Angular / Karma - PullRequest
0 голосов
/ 26 июня 2018

Я просматриваю несколько статей о модульном тестировании и нашел несколько довольно полезных примеров. Большинство примеров, с которыми я сталкиваюсь, похоже, являются модульным тестированием функции, которая делает что-то с Angular HttpClient, и большинство выглядит так:

it('should return an Observable<User[]>', () => {
    const dummyUsers = [
      { login: 'John' },
      { login: 'Doe' }
    ];

    service.getUsers().subscribe(users => {
      expect(users.length).toBe(2);
      expect(users).toEqual(dummyUsers);
    });

    const req = httpMock.expectOne(`${service.API_URL}/users`);
    expect(req.request.method).toBe("GET");
    req.flush(dummyUsers);
  });

https://medium.com/netscape/testing-with-the-angular-httpclient-api-648203820712

Это означает, что .getUsers() возвращает наблюдаемое. Однако в моем заявлении я не возвращаю наблюдаемое. Почти все мои HttpClient звонки похожи на это:

async getCurrentUser(): Promise<UserInfo> {
     return await this._httpClient.get(`/api/me`).toPromise();
}

Как вы проводите модульное тестирование функции, вызывающей HttpPost или HttpGet в Карме?

Попытка:

  it('should get current user', async () => {
    const result = service.getCurrentUser();
    console.log('RESULT', result);
    const req = httpMock.expectOne(`/api/me`);
    const test = req.flush({test: 'ing'});
    console.log('REQUEST', test);

    expect('a').toEqual('a');
  });

1 Ответ

0 голосов
/ 26 июня 2018

Я думаю, что я переосмыслил это, но мне удалось заставить его работать, используя .then вместо использования await, как в обычном (не тестовом) вызове:

it('should get current user', async () => {
    const response = new CustomResponseClass();
    response.success = true;
    response.error = null;
    const user = new User();
    user.userId = 1;
    user.name = 'Test User';
    response.data = user;
    service.getCurrentUser().then( _user => {
      console.log('USER', _user);
      // TODO: Some more unit tests here...
    });
    const req = httpMock.expectOne('/api/me');
    expect(req.request.method).toEqual('GET');
    req.flush(response);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...