MethodToBeTested() {
  this.serviceA.methodA1().subscribe((response) => {
   if (response.Success) {
     this.serviceA.methodA2().subscribe((res) => {
        this.serviceB.methodB1();
      })
    }
  });
}


这是场景。

要测试的东西:


serviceA.methodA1().被调用。
如果响应成功,则检查是否调用了serviceA.methodA2()
检查serviceB.methodB1()收到值时是否调用了serviceA.methodA2()


首先,一个很容易测试。

let spy = spyOn(serviceA, 'methodA1');
expect(spy).toHaveBeenCalled();


但是一个测试2和3吗?

 let spy= spyOn(serviceA, 'methodA1').and.returnValue({subscribe: () => {success:true}});
subject.MethodToBeTested();


这样的东西?

最佳答案

最好不要使用嵌套订阅。

这样的事情可能是解决方案:

let $obs1 = this.serviceA.methodA1().pipe(share());
let $obs2 = $obs1.pipe(switchMap(x => this.serviceA.methodA2()));

$obs1.subsribe(logic1 here...);
$obs2.subsribe(logic2 here...);

10-07 17:31