Angular 影响基本测试问题的构造函数注入

Angular 影响基本测试问题的构造函数注入,angular,angular6,Angular,Angular6,我有一个Angular6项目,其组件中有以下构造函数: constructor(@Inject('httpClient')private httpClient: HttpClient) { } describe('AppComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ AppComponent ], imports

我有一个Angular6项目,其组件中有以下构造函数:

constructor(@Inject('httpClient')private httpClient: HttpClient) {
}
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
  declarations: [
    AppComponent
        ],
  imports: [
    FormsModule,
    HttpClientModule,
    HttpClientTestingModule
  ]
}).compileComponents();
}));
但是,它可能会影响组件生成测试的结果(例如,“应创建应用程序”),并显示与以下内容相关的消息:

Error: StaticInjectorError(DynamicTestModule)[httpClient]: 
StaticInjectorError(Platform: core)[httpClient]: 
NullInjectorError: No provider for httpClient!
我已经尝试导入HttpClientModule和HttpClientTestingModule,但并没有解决问题。 与描述组件相关的代码:

constructor(@Inject('httpClient')private httpClient: HttpClient) {
}
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
  declarations: [
    AppComponent
        ],
  imports: [
    FormsModule,
    HttpClientModule,
    HttpClientTestingModule
  ]
}).compileComponents();
}));
我可以采取哪些步骤来消除错误消息?

尝试模拟服务。 首先,创建虚拟服务:

class MockHttpClient { }
然后,在
TestBed providers
中使用模拟服务,而不是
HttpClient

providers: [         
    { provide: HttpClient, useClass: MockHttpClient },
]
这样,您就不必实现服务的所有依赖项。
当然,您将无法使用真正的
HttpClient
功能,但这不应该是一个问题,因为您应该只测试组件,而不是服务。

如果您面临与构造函数相关的测试问题,并且出现涉及InjectorError的消息,您可以使用configureTestingModule添加导入

例如:

TestBed.configureTestingModule({
imports: [
  HttpClientModule
]
})