【问题标题】:Jasmine : How to SpyOn a method callback : method.then()Jasmine:如何监视方法回调:method.then()
【发布时间】:2018-04-20 04:04:40
【问题描述】:

在我的 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(...).then 不是函数

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

【问题讨论】:

  • Observables 没有 then() 方法。承诺可以。检查服务方法的文档/代码/返回类型,并验证它是否返回了 Promise。在您的测试中返回一个虚假的承诺。

标签: angular unit-testing typescript jasmine spyon


【解决方案1】:
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);

【讨论】:

猜你喜欢
  • 2014-01-25
  • 2013-08-31
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
相关资源
最近更新 更多