Angular 4.3中的单元测试HttpClientModule:来自HttpTestingController.expectOne(url)的未定义返回值

前端之家收集整理的这篇文章主要介绍了Angular 4.3中的单元测试HttpClientModule:来自HttpTestingController.expectOne(url)的未定义返回值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图了解如何使用作为新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.

猜你在找的Angularjs相关文章