Jasmine:如何SpyOn方法回调:method.then()

时间:2017-11-07 16:48:43

标签: angular unit-testing typescript jasmine spyon

在我的Angular 4.0.0应用程序中,我有这个方法,在我的组件中调用。

在服务中调用此方法:

    this.myService.myMethod(param).then(any => {
        console.log("success case")
    })
      .catch(error => {
            console.log("error");
        }
      });
  };

由于我正在进行单元测试,我通过模拟服务来隔离我的组件:我正在嘲笑这个方法,如下所示:

myMethodSpy= spyOn(service, 'myMethod').and.callFake((reg) => {
    return Observable.of('always error message');
});

但是在执行时,似乎没有调用我的spyMethod:

  

TypeError:this.service.myMethod(...)。然后不是函数

关于问题起源的任何想法?

1 个答案:

答案 0 :(得分:2)

const pMock = {then: () => 'something'}
myMethodSpy= spyOn(service, 'myMethod').and.returnValue(pMock);

或者你可以回复实际的承诺。

const pMock = new Promise((resolve, reject) => {
  resolve(someValue); 
  // or reject("failure reason"); 
});
myMethodSpy= spyOn(service, 'myMethod').and.returnValue(pMock);