покрытие кода не распознает мою шпионскую функцию - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть эта функция в моем сервисе.

  addTeamMember(data): Observable<any> {
   if (data && typeof data === 'object') {
    return this.http.post<any>(`${this.baseUrl}/members`, 
     JSON.stringify(data), { headers: this.headers });
   } else {
    return null;
   }

}

, и я проверяю это с:

it('should be create a new member', () => {
const data = {
  name: 'Rodolfo Lenin',
  lastName: 'xxxx xxxx',
  rol: 'Front-End',
  gender: 'male'
};
spy = spyOn(teamService, 'addTeamMember');
spy.and.callThrough();
spy.and.callFake(function() {});
spy.and.returnValue(data);
response = teamService.addTeamMember(of(data));
console.log(response, data, 'werr');
// expect(teamService.addTeamMember).toHaveBeenCalled();
expect(data).toEqual(jasmine.any(Object));
expect(response).toEqual(data); });

Я не знаю, почему тестирование покрытия не 'не распознайте этот вызов введите описание изображения здесь

1 Ответ

0 голосов
/ 27 декабря 2018

Вы заглушаете свой teamMember.addTeamMember, поэтому его никогда не вызывают.Вы можете проверить это с помощью console.log утверждений (или просто доверяйте своему инструменту покрытия кода;)

Вы должны заглушить http.post, чтобы ваш addTeamMember действительно проверялся.

ИмеяТем не менее, ваш тест не имеет смысла:

  • Вы передаете наблюдаемую функцию вашей функции, когда она ожидает объект
  • Вы притворяетесь, что ваш метод возвращает объект вместонаблюдаемое

Возможное решение

 it('creates a new member', () => {

    const data = {
      name: 'Rodolfo Lenin',
      lastName: 'xxxx xxxx',
      rol: 'Front-End',
      gender: 'male'
    };

    spyOn(httpService, 'post').and.returnValue(of(data));

    teamService.addTeamMember(data).subscribe((responseData) => {
        expect(responseData).toEqual(data);
    });
 });

Обратите внимание, что вам следует написать еще один тест для случая, когда ваша служба возвращает ноль.Однако возвращение нулевого значения, поскольку были переданы недопустимые параметры, обычно считается антишаблоном.См. Возвращает ли ноль плохой дизайн?

Кроме того, есть другой подход, предложенный Angular https://angular.io/guide/http#testing-http-requests

И вот забавный разговор о проверке параметров https://blogs.msdn.microsoft.com/oldnewthing/20091210-00/?p=15713

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