单元测试中如何使用和处理来自服务的订阅响应 angular 5 实现代码覆盖?
How to use and handle subscribed response from service in unit testing angular 5 to achieve code coverage?
我无法对以下代码进行代码覆盖。我正在使用 jasmine 和 karma 进行代码覆盖。 Angular 5 个项目。
// demo.component.ts
public demoMethod(): void {
this.myService.getStatus(this.arg1).subscribe((response) => {
this.isLogin = response.isLogin;
if (response.status === 'Status_01') {
this.userStatus = 'Status_01';
} else if (response.status === 'Status_02') {
this.userStatus = 'Status_02';
} else {
this.error = 'Invalid'
}
});
}
// demo.component.spec.ts
describe('demoMethod', () => {
it('should call demoMethod method if', () => {
const response = { status: 'Status_01', isLogin: true };
const
myServiceSpy = spyOn(component['myService'],'getStatus').and.returnValue(of({
response }));
component.demoMethod();
expect(myServiceSpy).toHaveBeenCalled();
});
it('should call demoMethod method else if', () => {
const response = { status: 'Status_02', isLogin: true };
const
myServiceSpy = spyOn(component['myService'],'getStatus').and.returnValue(of({
response }));
component.demoMethod();
expect(myServiceSpy).toHaveBeenCalled();
});
});
我无法在成功响应后为 if else 阶梯进行代码覆盖或编写单元测试用例。
我正在使用 > ng test --code-coverage --watch=true
查看演示组件的代码覆盖率。
我已经解决了上面的问题如下。我尝试在 rxjs 的 of 中添加响应对象;这导致我无法处理 if-else 阶梯。您可以在下面的代码片段中看到我添加了 status 的位置,它正在用于代码覆盖率。
it('should call demoMethod method if', () => {
const myServiceSpy = spyOn(component['myService'],'getStatus').and.returnValue(of({
status: 'Status_01'
}));
component.demoMethod();
expect(myServiceSpy).toHaveBeenCalled();
});
我无法对以下代码进行代码覆盖。我正在使用 jasmine 和 karma 进行代码覆盖。 Angular 5 个项目。
// demo.component.ts
public demoMethod(): void {
this.myService.getStatus(this.arg1).subscribe((response) => {
this.isLogin = response.isLogin;
if (response.status === 'Status_01') {
this.userStatus = 'Status_01';
} else if (response.status === 'Status_02') {
this.userStatus = 'Status_02';
} else {
this.error = 'Invalid'
}
});
}
// demo.component.spec.ts
describe('demoMethod', () => {
it('should call demoMethod method if', () => {
const response = { status: 'Status_01', isLogin: true };
const
myServiceSpy = spyOn(component['myService'],'getStatus').and.returnValue(of({
response }));
component.demoMethod();
expect(myServiceSpy).toHaveBeenCalled();
});
it('should call demoMethod method else if', () => {
const response = { status: 'Status_02', isLogin: true };
const
myServiceSpy = spyOn(component['myService'],'getStatus').and.returnValue(of({
response }));
component.demoMethod();
expect(myServiceSpy).toHaveBeenCalled();
});
});
我无法在成功响应后为 if else 阶梯进行代码覆盖或编写单元测试用例。
我正在使用 > ng test --code-coverage --watch=true
查看演示组件的代码覆盖率。
我已经解决了上面的问题如下。我尝试在 rxjs 的 of 中添加响应对象;这导致我无法处理 if-else 阶梯。您可以在下面的代码片段中看到我添加了 status 的位置,它正在用于代码覆盖率。
it('should call demoMethod method if', () => {
const myServiceSpy = spyOn(component['myService'],'getStatus').and.returnValue(of({
status: 'Status_01'
}));
component.demoMethod();
expect(myServiceSpy).toHaveBeenCalled();
});