Условие else не покрывается тестовым покрытием - PullRequest
0 голосов
/ 06 марта 2020

Я проверяю условие else, когда данные пусты. Я имею в виду еще из if (данных). Я проверил, когда нет данных, значение console.log ('xxx', данные); имеет длину 0. Я также использовал пустую библиотеку {} в качестве return-наблюдаемой для имитации службы, возвращающей пустую наблюдаемую. Тест не проходит, как говорит, что ожидаемый объект ({}) не определен.

Ниже приведены вещи, которые я пробовал до сих пор. Не уверен, где я иду не так

 //component.agreementsService.getOutstandingAgreements(0).subscribe(result => expect(result.length).toBe(0));
    //component.agreementsService.getOutstandingAgreements(0).subscribe(result => expect(result.length).not.toBeGreaterThan(0));
    component.agreementsService.getOutstandingAgreements(1).subscribe(result => expect(result).toBe(undefined));
   // expect(component.agreementsService.getOutstandingAgreements(0)).toBe(undefined);
    //expect(component.dataLength).toBe(undefined);

Может кто-нибудь сказать мне, в чем проблема

Компонент

 import { Observable, of, empty } from 'rxjs';

      public getOutstandingAgreements(Id: number) {
        console.log(Id);

        this.agreementsService.getOutstandingAgreements(Id).subscribe((data: AgreementsModel[]) => {
         console.log('xxx', data);
          if (data.length > 0) {
            this.myData = data;
            this.agreementData = this.myData[0].data;
            this.agreementLength = this.myData.length;
            this.calculateRemainingDaysLeft(0);
          }
        });
      }

Тест

 let mockAgreementsService: Mock<AgreementsService>;
         const agreementModel : AgreementsModel[] = [{ userAgreementId: 1,
            agreementId: 1,
            code: '',
            userAgreementStateId: 1,
            userAgreementStateName: '',
            acceptanceWindowExpiry: new Date((new Date()).getTime() + 24*60*60*1000) ,
            version: '',
            data: '<h1></h1>',
            authoredById: 1,
            authoredByName: '',
            authored: new Date((new Date()).getTime() + 24*60*60*1000)  ,
            issuedById: 1,
            issuedByName: '',
            issued: new Date((new Date()).getTime() + 24*60*60*1000) }];


          configureTestSuite(() => {
            TestBed.configureTestingModule({
              imports: [SharedModule, FontAwesomeModule],
              declarations: [AgreementComponent, CustomScrollDirective],
              providers: [{ provide: UserService, useValue: mockUserService },
              { provide: AgreementsService, useFactory: () => mockAgreementsService.Object   }]
            });
          });

          function setupComponent() {
            fixture = TestBed.createComponent(AgreementComponent);
            component = fixture.componentInstance;

          }


          beforeEach(() => {
            mockAgreementsService = new Mock<AgreementsService>({
              getOutstandingAgreements: () => of(agreementModel),
              updateAgreement: () => Promise.resolve([])
            });
            });




           fit('should not return data when  getOutstandingAgreements is called', () => {
setupComponent();
mockAgreementsService.extend({ getOutstandingAgreements: () => of(<AgreementsModel[]>{})});
//component.agreementsService.getOutstandingAgreements(0).subscribe(result => expect(result.length).toBe(0));
//component.agreementsService.getOutstandingAgreements(0).subscribe(result => expect(result.length).not.toBeGreaterThan(0));
component.agreementsService.getOutstandingAgreements(1).subscribe(result => expect(result).toBe(undefined));
// expect(component.agreementsService.getOutstandingAgreements(0)).toBe(undefined);
//expect(component.dataLength).toBe(undefined);

});

Обновление 1

Следующие тесты пройдены успешно, однако покрытие теста не пройдено, говоря, что условие не выполнено.

mockAgreementsService.extend({ getOutstandingAgreements: () => of<AgreementsModel[]>([]) });
component.agreementsService.getOutstandingAgreements(0).subscribe(result => expect(result.length).not.toBeGreaterThan(0));

1 Ответ

0 голосов
/ 09 марта 2020

Вы подписываетесь на наблюдаемое, поэтому оно не входит в подписку внутри функции getOutstandingArguments в вашем тесте.

Для проверки логики c внутри подписки вам необходимо убедиться, что ваше действие вызовет подписку в тесте, поэтому в вашем случае вы хотите вызвать метод напрямую. Вы бы хотели, чтобы ваш тест был примерно таким:

it('should not set data when getArguments is called', () => {
    /* setup return value to be empty array */
    mockAgreementsService.extend({ getOutstandingAgreements: () => of(<AgreementsModel[]>{})});

    // after setting up the return value now call component.getOutstandingAgreements
    component.getOutstandingAgreemnts(0);

    // now check that data has not been modified
    // note I do not know what the initial value of myData is I am assuming it is an empty array
    expect(component.myData.length).toBe(0);
    /* if myData is not initialized and not set to an empty array by default do the following */
    expect(component.myData).toBe(undefined);
}

Теперь он должен go внутри подписки наблюдаемого, созданного внутри метода в Компоненте, в соответствии с подпиской, которую вы сделали в тест

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