Angular 4.3中的单元测试HttpClientModule:来自HttpTestingCont
发布时间:2020-12-17 17:03:16 所属栏目:安全 来源:网络整理
导读:我试图了解如何使用作为新HttpClientModule的一部分提供的模拟功能.我的测试代码几乎完全匹配现有文档中显示的内容.但是,doc示例并不完整 – 例如,至少缺少TestBad和inject的import语句.我假设来自@ angular / common / http的HttpClient也是如此.我的测试代
我试图了解如何使用作为新HttpClientModule的一部分提供的模拟功能.我的测试代码几乎完全匹配现有文档中显示的内容.但是,doc示例并不完整 – 例如,至少缺少TestBad和inject的import语句.我假设来自@ angular / common / http的HttpClient也是如此.我的测试代码添加了这些.
此测试失败,因为在httpMock.expectOne调用之后req最终未定义.我很欣赏为什么会这样. import { TestBed,inject } from '@angular/core/testing'; import { HttpClient } from '@angular/common/http'; import { HttpClientTestingModule,HttpTestingController } from '@angular/common/http/testing'; describe('HttpClientTestingModule',() => { beforeEach(() => TestBed.configureTestingModule({ imports: [ HttpClientTestingModule ],providers: [ HttpClient,HttpTestingController] })); it('expects a GET request',inject([HttpClient,HttpTestingController],(http: HttpClient,httpMock: HttpTestingController) => { http .get('/data') .subscribe(data => expect(data['name']).toEqual('Test Data')); const req = httpMock.expectOne('/data'); expect(req).toBeDefined(); expect(req.request.method).toEqual('GET'); req.flush({name: 'Test Data'}); httpMock.verify(); })); }); 解决方法
虽然我不明白为什么会这样,但我通过从TestBed.configureTestingModule中删除以下内容来实现它:
提供者:[HttpClient,HttpTestingController] 我欢迎任何深入了解为什么我需要将自己的服务添加到providers集合,而不是HttpClient,HttpTestingController. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |