Я проверяю условие 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));