Angular 错误:HttpClient没有提供程序!角度10
在使用Jasmine运行测试时,我收到HttpClient null注入器错误。我已经模拟了服务,但仍然得到了错误。我不知道为什么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
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调用