Angular 错误:HttpClient没有提供程序!角度10

Angular 错误:HttpClient没有提供程序!角度10,angular,Angular,在使用Jasmine运行测试时,我收到HttpClient null注入器错误。我已经模拟了服务,但仍然得到了错误。我不知道为什么 import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { SpreadsheetComponent } from '../spreadsheet/spreadsheet.component'; import { SpreadsheetService } fro

在使用Jasmine运行测试时,我收到HttpClient null注入器错误。我已经模拟了服务,但仍然得到了错误。我不知道为什么

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { SpreadsheetComponent } from '../spreadsheet/spreadsheet.component';
import { SpreadsheetService } from '../../services/spreadsheet/spreadsheet.service';
import { Mock } from 'ts-mocks';
import { of } from 'rxjs';
import { FormsModule } from '@angular/forms';

fdescribe('SpreadsheetComponent', () => {
  let component: SpreadsheetComponent;
  let fixture: ComponentFixture<SpreadsheetComponent>;
  let mockSpreadSheetService;

  const xmlData =
    `
  <?xml version="1.0" encoding="UTF-16"?>
  <Reports>
  <Report>
      <Name>F 20.04</Name>
      <ReportVal>
    <ReportRow>10</ReportRow>
    <ReportCol>10</ReportCol>
      <Val>100</Val>
    </ReportVal>
    <ReportVal>
    <ReportRow>10</ReportRow>
    <ReportCol>11</ReportCol>
      <Val>200</Val>
    </ReportVal>
    <ReportVal>
    <ReportRow>10</ReportRow>
    <ReportCol>12</ReportCol>
      <Val>0</Val>
    </ReportVal>
    <ReportVal>
    <ReportRow>20</ReportRow>
    <ReportCol>10</ReportCol>
      <Val>600</Val>
    </ReportVal>
    <ReportVal>
    <ReportRow>20</ReportRow>
    <ReportCol>11</ReportCol>
      <Val>500</Val>
    </ReportVal>
    <ReportVal>
    <ReportRow>20</ReportRow>
    <ReportCol>12</ReportCol>
      <Val>600</Val>
    </ReportVal>
    </Report>
  </Reports>
  `
    ;




  beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [SpreadsheetComponent],
        providers: [{SpreadsheetService, useFactory: () =>   mockSpreadSheetService.Object}]
      })
      .compileComponents();
  }));

  beforeEach(() => {

    mockSpreadSheetService = new Mock<SpreadsheetService>({
      loadXML: () => of(xmlData)
    });

    fixture = TestBed.createComponent(SpreadsheetComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();

  });

  it('should create', () => {

   // fixture.detectChanges();
    expect(component).toBeTruthy();
  });
});
从'@angular/core/testing'导入{async,ComponentFixture,TestBed};
从“../spreadsheet/spreadsheet.component”导入{SpreadsheetComponent};
从“../../services/spreadsheet/spreadsheet.service”导入{SpreadsheetService};
从“ts Mock”导入{Mock};
从'rxjs'导入{of};
从'@angular/forms'导入{FormsModule};
fdescribe('电子表格组件',()=>{
let组件:电子表格组件;
let夹具:组件夹具;
让我们一起去服务;
常量xmlData=
`
F 20.04
10
10
100
10
11
200
10
12
0
20
10
600
20
11
500
20
12
600
`
;
beforeach(异步(()=>{
TestBed.configureTestingModule({
声明:[电子表格组件],
提供程序:[{SpreadsheetService,useFactory:()=>mockSpreadSheetService.Object}]
})
.compileComponents();
}));
在每个之前(()=>{
mockSpreadSheetService=新模拟({
loadXML:()=>of(xmlData)
});
fixture=TestBed.createComponent(电子表格组件);
组件=fixture.componentInstance;
fixture.detectChanges();
});
它('应该创建',()=>{
//fixture.detectChanges();
expect(component.toBeTruthy();
});
});

测试组件时,无论您在应用程序模块中导入了什么模块,还是包含测试组件的模块,除非您在测试床中导入组件的父模块


对于这种特殊情况,您似乎没有在测试床中导入
HttpClientTestingModule
。您可以导入它并使用
HttpTestingController
模拟HTTP调用。

这是否回答了您的问题?我在app.module的imports数组中有HttpClientModule。我的问题和嘲笑有关。我已经模拟了电子表格服务,所以从技术上讲,它不应该检查http客户端,我认为这是可行的,我已经添加到服务的规范文件中,因为我认为这里只需要它,因为服务使用http,但我不知道我也必须将它添加到组件中。但是发现它有点奇怪,因为组件没有进行任何直接http调用