【发布时间】:2020-03-09 22:33:30
【问题描述】:
当数据为空时,我正在测试 else 条件。我指的是if(数据)的else。我检查了没有数据的时候,console.log('xxx', data);的值长度为 0。我使用空库以及 {} 作为 return observable 来模拟返回空 observable 的服务。 测试没有通过,因为预期对象({ })未定义。
以下是我迄今为止一直在尝试的事情。不知道哪里出错了
//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
以下通过了测试,但是测试覆盖率失败,说 else 条件不满足。
mockAgreementsService.extend({ getOutstandingAgreements: () => of<AgreementsModel[]>([]) });
component.agreementsService.getOutstandingAgreements(0).subscribe(result => expect(result.length).not.toBeGreaterThan(0));
【问题讨论】:
-
你的模拟应该返回未定义。 if 检查返回 true 并返回一个空数组 []
-
我已经尝试了以下但测试仍然没有涵盖。 it('在调用 getOutstandingAgreements 时不应返回数据', () => { setupComponent(); mockAgreementsService.extend({ getOutstandingAgreements: () => undefined}); //component.agreementsService.getOutstandingAgreements(0).subscribe(结果 => 期望(结果).toBe(未定义));期望(component.agreementsService.getOutstandingAgreements(0)).toBe(未定义);});
-
我刚刚更新了帖子。请参阅更新部分。测试通过但测试覆盖失败
-
你能分享一个小提琴或codepen吗?