加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读