Покрытие кода не происходит при записи блок-теста в функцию обещания - PullRequest
1 голос
/ 24 сентября 2019

Я пишу тестовые случаи с использованием угловых 6 и жасмина.Я не могу охватить функцию getUserJSON после написания небольшого контрольного примера в приведенной ниже функции кода.Как закрыть функцию отверстия, чтобы получить полный процент в коде покрытия для этой функции.

export class UserLoginService implements OnDestroy {



  // Store the userdata
  getUserDatafromSubject(userData: IUser) {
    this.userData.next(userData);
  }

  //To get LoggedIn User Deatils
  getUserJSON(): Promise<boolean> {
    return new Promise<boolean>((resolve) => {
      this._servSub = this.http.get<IUser>(/*environment.appBaseUrl + 'Account/LogIn' */'api/homepage/user.json').subscribe(value => {
        value.selAssetClass = 'COM';
        if (!value.userId || !value.userName || value.userAsset.length === 0 || value.pageAccess.length === 0) {
          value.isAuthorized = false;
        } else {
          value.isAuthorized = true;
        }
        this.getUserDatafromSubject(value);
        resolve(true);
      })
    });
  }

И мой файл спецификации выглядит следующим образом:

import { TestBed, inject, async } from '@angular/core/testing';

import { UserLoginService } from './user-login.service';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';


describe('UserLoginService', () => {
  let service: UserLoginService;
  let httpMock: HttpTestingController;

  beforeEach(() => {

    TestBed.configureTestingModule({
      providers: [UserLoginService],
      imports: [HttpClientTestingModule],
    });

    service = TestBed.get(UserLoginService);
    httpMock = TestBed.get(HttpTestingController);
  });



  it('should call getUserJSON from apiService', function(done) {
    spyOn(service, 'getUserJSON').and.returnValue(Promise.resolve(true));
    service.getUserJSON()
      .then((result) => {     
        expect(result).toEqual(true);
        expect(service.getUserJSON).toHaveBeenCalled();             
        done();
      });
  });

});

Мой тестдело проходит нормально, но не может полностью покрыть код.Я хочу полностью охватить функцию getUserJSON .любая помощь?

1 Ответ

0 голосов
/ 25 сентября 2019

Вы шпионите за getUserJSON и возвращаете значение.Когда вы делаете это, фактическая функция никогда не выполняется, вместо этого вызывается шпион.Вот почему вы не видите покрытие.

Чтобы вызвать фактическую функцию getUserJSON и все еще следить за ней, замените ваш spyOn вызов следующим кодом:

spyOn(service, 'getUserJSON').and.callThrough();
...