单元测试中如何使用和处理来自服务的订阅响应 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();
 });