Ros*_*shi 7 unit-testing subscriber observable karma-jasmine angular
我想要进行单元测试并获得所有代码的覆盖率,但我无法获得订阅内存在的代码的覆盖率我能够监视服务和功能,但在订阅内我无法进行单元测试并获得代码覆盖率。以下是 Angular 7 代码。
LoadListData(type) {
this.itemListEnvName = [];
if (type === 'EnvirnmentList') {
this.environmentBookingService.getBookedEnv()
.subscribe(
(environmentBookingsData: EbEnvironmentBooking[]) => {
if (environmentBookingsData.length > 0) {
this.itemListEnvNameList = environmentBookingsData;
this.itemListEnvName = [];
this.itemListEnvNameList.forEach(element => {
const obj = {};
obj['id'] = element['environmentId'];
obj['itemName'] = element['environmentName'];
this.itemListEnvName.push(obj);
this.generateCheckDisable = false;
});
} else {
this.generateCheckDisable = true;
}
},
(error) => {
this.showMessage('No Response From Delivery DB API');
}
);
} else {
this.showMessage('No Response From Delivery DB API');
}
}
Run Code Online (Sandbox Code Playgroud)
单元测试用例内的代码就像
it('should call getBookedEnv service ', function () {
const service = TestBed.get(EnvironmentBookingService); // get your service
spyOn(service, 'getBookedEnv').and.callThrough(); // create spy
component.LoadListData('EnvirnmentList');
expect(service.getBookedEnv).toHaveBeenCalledWith();
});
Run Code Online (Sandbox Code Playgroud)
如何在 subscribe ie 中对代码进行单元测试
if (environmentBookingsData.length > 0) {
this.itemListEnvNameList = environmentBookingsData;
this.itemListEnvName = [];
this.itemListEnvNameList.forEach(element => {
const obj = {};
obj['id'] = element['environmentId'];
obj['itemName'] = element['environmentName'];
this.itemListEnvName.push(obj);
this.generateCheckDisable = false;
});
} else {
this.generateCheckDisable = true;
}
Run Code Online (Sandbox Code Playgroud)
如果您想测试里面的代码subscribe,您必须模拟您的服务调用,然后测试您在里面修改的组件变量subscribe,例如this.itemListEnvName和this.generateCheckDisable。
这可能看起来像这样:
it('should call getBookedEnv service ', function () {
const service = TestBed.get(EnvironmentBookingService); // get your service
spyOn(service, 'getBookedEnv').and.callFake(() => {
return of([]); // or return a list of bookings in case you want to test the first part of the if statement
});
component.LoadListData('EnvironmentList');
expect(service.getBookedEnv).toHaveBeenCalledWith();
// additional tests that verify the inside of the subscribe (change below in case the mocked service returned something)
expect(component.itemListEnvName).equalTo([]);
expect(component.generateCheckDisable).equalTo(false);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19643 次 |
| 最近记录: |