Angular - 覆盖/模拟方法从 HTTP 获取、发布、放置、删除以进行测试

标签 angular typescript jasmine

我正在尝试模拟 Http 类,这样我就可以将它注入(inject)到我想测试的服务中。

通常,我会创建一个模拟类来扩展将被覆盖的类。对于这种情况,我做了这样的事情:

export class MockHttp extends Http {
    constructor(){super(undefined, undefined);}
    get(url: string, options?: RequestOptionsArgs): Observable<Response> {
        return new Observable((observer) => {
            observer.next(undefined);
            observer.complete();
        });
    }
}

但是 vs codeintelisense 在方法 get 上给我以下错误:

Property 'get' in type 'MockAppHttpClientService' is not assignable to the same property in base type 'Http'.

有人知道怎么解决吗?

最佳答案

您不必编写自己的模拟,因为这不是一项微不足道的任务。 Angluar 已经提供实用程序来模拟 http 客户端以进行单元测试。官方文档中有足够详细的描述

https://angular.io/guide/testing#testing-http-services

简而言之,使用HttpClientTestingModule

关于Angular - 覆盖/模拟方法从 HTTP 获取、发布、放置、删除以进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52365671/

相关文章:

typescript :lambda 的类型是什么?

typescript - 按对象键的通用数据

javascript - 使用 Jasmine 访问 js 模块的方法,以便可以单独测试它们

javascript - 如何测试返回 $timeout promise 且内部包含 $http.get 的 AngularJS 工厂方法?

javascript - 自定义 Jasmine 匹配器和 promise

angular - 即使 Angular CLI 可以构建,Webclipse 也找不到模块

angular - Material 对话框 : Managing Z-index on click event with multiple Dialog instances

angular - 在 ng build --prod in angular 7 后获取导航错误

javascript - 如何自定义 FirebaseUI-Web 的主题

html - 无法在 Angular5 中将边距设置为 0