httpclientmodule - El servicio Angular 5 no puede pasar las pruebas unitarias con(NullInjectorError: ¡No hay proveedor para HttpClient!)
httpclient angular 6 (2)
Me enfrentaba a "NullInjectorError: No hay proveedor para HttpClient!" problema. Después de aplicar todas las opciones disponibles sugeridas en línea, ninguna funcionó para mis pruebas de unidad angular.
Por fin, solo agregando la siguiente pieza en mi archivo .service.spec.ts se solucionó el problema.
imports: [
HttpClientModule,
],
Sigo recibiendo los siguientes errores al ejecutar pruebas unitarias
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();
}
)
);
});
No entiendo qué es lo que no funciona, ya que he incluido HttpClient en api.service.ts, el servicio funciona en el navegador.
Esto se llama directamente en un componente llamado MapComponent, y se llama dentro de 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!
Trate de envolver su inject
en un async
, como a continuación:
import { TestBed, async, inject } from ''@angular/core/testing'';
import { HttpClientTestingModule, HttpTestingController } from ''@angular/common/http/testing'';
import { ApiService } from ''./api.service'';
describe(''ApiService'', () => {
beforeEach(() => {
...
});
it(`should create`, async(inject([HttpTestingController, ApiService],
(httpClient: HttpTestingController, apiService: ApiService) => {
expect(apiService).toBeTruthy();
})));
});
No se olvide de importar async
desde @angular/core/testing
.
He tenido un gran éxito con esto. Es el único diferente de tus pruebas de unidad y el mío donde uso HttpClientTestingModule
.