web-dev-qa-db-ja.com

Angular 4.x:サービスのプロバイダーなし

Angular 4.xで別のサービスにサービスを挿入するのに問題があり、エラーを受け取ります:Error: No provider for SkillsService!

このエラーを再現するレポ を作成しました。リポジトリのクローンを作成し、ng testをリポジトリのルートディレクトリから実行するだけで、これをローカルで実行できます。

私がとったステップ...

  1. ng newでアプリを作成します
  2. ng g service contactを使用してContactServiceを作成します
  3. ng g service skillsでSkillsServiceを作成します
  4. SkillsServiceをContactServiceのコンストラクターに追加します(@Injectアノテーション付き)
  5. SkillsServiceとContactServiceの両方をapp.module.tsにプロバイダーとして追加します
  6. ng testを実行し、エラーを受け取ります:Error: No provider for SkillsService!

SkillsServiceのContactServiceにプロバイダーを追加するにはどうすればよいですか?

それは非常にシンプルなものでなければならないように思えますが、ドキュメントを調べて検索するのは難しいことがわかっています。

8
Baldy

ContactServiceのテストでは、ContactServiceをプロバイダーとしてのみ宣言するテストモジュールを使用します。ただし、ContactServiceにはSkillsServiceが必要です。したがって、SkillsServiceもテストモジュールのプロバイダーの一部である必要があります。

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

テストでアプリケーションモジュール全体を使用することもできます。

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

しかし、アプリケーションの成長中にテストがますます遅くなるため、お勧めしません。

13
JB Nizet