87 votes

Angular 6 - NullInjectorError : Aucun fournisseur pour HttpClient dans les tests unitaires

J'importe et utilise HttpClient dans un service comme suit :

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
    providedIn: 'root',
})
export class MyService {
    constructor(private http: HttpClient) { }

    getData() {
        return this.http.get("url...");
    }
}

Cependant, lorsque je lance ng test pour mon tests unitaires et lorsque ces tests utilisent le service, j'obtiens l'erreur suivante :

Error: StaticInjectorError(DynamicTestModule)[HttpClient]: 
  StaticInjectorError(Platform: core)[HttpClient]: 
    NullInjectorError: No provider for HttpClient!

El Documentation d'Angular 6 sur HTTP dit juste de faire ce que j'ai fait ci-dessus.

1 votes

Quel est le code du test unitaire ? C'est important.

0 votes

0 votes

@KevinDoyon Non, ma question porte sur l'échec en ce qui concerne les tests unitaires, pas autrement.

154voto

user9964622 Points 1085
import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import {HttpClientModule} from '@angular/common/http';
import { myService } from './myservice';

describe('myService', () => {

      beforeEach(() => TestBed.configureTestingModule({
        imports: [HttpClientTestingModule], 
        providers: [myService]
      }));

       it('should be created', () => {
        const service: myService = TestBed.get(myService);
        expect(service).toBeTruthy();
       });

       it('should have getData function', () => {
        const service: myService = TestBed.get(myService);
        expect(service.getData).toBeTruthy();
       });

    });

17 votes

Merci, j'avais juste besoin d'ajouter HttpClientTestingModule a la imports dans le tableau configureTestingModule méthode.

0 votes

Oui, je voulais juste poster ça mais je me suis dit qu'il fallait que ce soit complet, je suis content que ça ait aidé.

0 votes

Cela fonctionne pour moi, je voulais ajouter le module dans le test principal alors qu'il doit être ajouté dans le test du service.

2voto

sanka sanjeewa Points 313
import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
import { myService } from './myservice';

describe('HeaderService', () => {
  beforeEach(() => TestBed.configureTestingModule({
    imports: [ HttpClientTestingModule ],
    providers: [myService]
  }));
});

-1voto

Vous devez ajouter HttpClient dans les importations de votre module où votre composant est déclaré

@NgModule({
  declarations: [
    MyComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpClientModule
  ],
  providers: []
})
export class AppModule { }

3 votes

L'utilisateur demande des tests unitaires... sans les utiliser dans un service.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X