angular - Jasmine : How to SpyOn a method callback : method. then()

标签 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(...).then is not a function

关于问题的起源有什么想法吗?

最佳答案

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

或者您可以返回一个实际的 promise 。

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

关于angular - Jasmine : How to SpyOn a method callback : method. then(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47163269/

相关文章:

html - 尝试呈现按钮控件时,Angular innerHTML 属性不起作用

java - 单元测试同步

javascript - 尽管 tsconfig 包含 `jsx` 选项,但 Jest 拒绝解析 JSX

javascript - 如何延迟在 [(ngModel)] 中获取数据?

javascript - 如何使用 Firebase 在 Ionic 3 中通过参数检索数据

angular - Ionic - ngStyle 中来自 SASS 文件的自定义颜色

vb.net - 如何在 VB.NET 1.1 中对对象序列化/反序列化进行单元测试?

node.js - 使用 Sequelize 关联时缺少属性错误

javascript - angular-cli ng 服务错误

c# - 正则表达式、捕获组和单元测试的良好设计