Le service Angular 5 ne réussit pas les tests unitaires avec NullInjectorError: aucun fournisseur pour HttpClient!)
j'obtiens les erreurs suivantes lors de l'exécution des tests unitaires
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.specs.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();
}
)
);
});
Je ne comprends pas ce qui ne va pas car J'ai inclus HttpClient dans l'api.service.ts, le service fonctionne dans le navigateur.
ceci est directement appelé dans un composant appelé MapComponent, et cela est appelé dans 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!
2 réponses
essayez d'emballer votre inject
dans un async
, comme ci-dessous:
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();
})));
});
N'oubliez pas d'importer async
@angular/core/testing
.
j'ai eu un bon succès avec ce. Il est le seul différent de vos tests de l'unité et le mien où j'utilise HttpClientTestingModule
.
je faisais face à " NullInjectorError: pas de fournisseur pour HttpClient!" question. Après avoir appliqué toutes les options disponibles suggérées en ligne, aucun n'a fonctionné pour mon unité angulaire de test.
enfin je viens d'ajouter la pièce ci-dessous dans mon.service.specs.ts fichier a réglé le problème.
imports: [
HttpClientModule,
],