web-dev-qa-db-fra.com

Angular 4.x: Aucun fournisseur de service

J'ai du mal à injecter un service dans un autre service dans Angular 4.x et je reçois l'erreur: Error: No provider for SkillsService!

J'ai créé un repo qui reproduit cette erreur . Vous pouvez l'exécuter localement en clonant le dépôt et en exécutant simplement ng test du répertoire racine du référentiel.

Étapes que j'ai prises ...

  1. Créer une application avec ng new
  2. Créez ContactService avec ng g service contact
  3. Créez SkillsService avec ng g service skills
  4. Ajouter SkillsService au constructeur de ContactService (avec annotation @Inject)
  5. Ajoutez à la fois SkillsService et ContactService à app.module.ts en tant que fournisseurs
  6. Courir ng test et recevez l'erreur: Error: No provider for SkillsService!

Comment ajouter un fournisseur à ContactService pour le SkillsService?

Il semble que ce doit être quelque chose de très simple, mais il s'avère difficile de travailler à partir de la documentation et de rechercher.

8
Baldy

Votre test pour ContactService utilise un module de test qui déclare uniquement ContactService en tant que fournisseur. Mais ContactService a besoin d'un SkillsService. Donc SkillsService doit également faire partie des fournisseurs du module de test:

TestBed.configureTestingModule({
  providers: [ContactService, SkillsService]
});

Vous pouvez également utiliser l'ensemble du module d'application dans votre test:

TestBed.configureTestingModule({
  imports: [AppModule]
});

Mais je ne recommanderais pas cela parce que vos tests deviendront de plus en plus lents pendant que l'application se développe.

13
JB Nizet