我在运行单元测试时不断收到以下错误
Error: StaticInjectorError(DynamicTestModule)[ApiService -> HttpClient]:
StaticInjectorError(Platform: core)[ApiService -> HttpClient]:
NullInjectorError: No provider for HttpClient!
api.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class ApiService {
constructor(private http: HttpClient) { }
url = './assets/data.json';
get() {
return this.http.get(this.url);
}
}
api.service.spec.ts
import { TestBed, inject } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { ApiService } from './api.service';
describe('ApiService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule,
],
providers: [
ApiService,
],
});
});
it('should get users', inject([HttpTestingController, ApiService],
(httpMock: HttpTestingController, apiService: ApiService) => {
expect(apiService).toBeTruthy();
}
)
);
});
我不明白哪里出了问题,因为我已将 HttpClient 包含到 api.service.ts 中,该服务在浏览器中运行。
这个是在一个叫做MapComponent的组件中直接调用的,那个是在HomeComponent内部调用的。
Chrome 63.0.3239 (Mac OS X 10.13.3) HomeComponent expect opened to be false FAILED
Error: StaticInjectorError(DynamicTestModule)[ApiService -> HttpClient]:
StaticInjectorError(Platform: core)[ApiService -> HttpClient]:
NullInjectorError: No provider for HttpClient!
最佳答案
"NullInjectorError: No provider for HttpClient!"
的原因是 Unresolved 依赖项。在这种情况下,缺少 HttpClientModule
。
在你的 .service.spec.ts 文件中添加
imports: [
HttpClientTestingModule,
],
您可能会注意到我写的是 HttpClientTestingModule
而不是 HttpClientModule
。原因是我们不想发送实际的 http 请求,而是使用测试框架的 Mock API。
关于Angular 5 服务无法通过单元测试(NullInjectorError : No provider for HttpClient!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48572621/