Angular 4.x:没有服务提供者

Bal*_*ldy 9 angular-services angular

我无法将服务注入Angular 4.x中的另一个服务并收到错误: Error: No provider for SkillsService!

我创建了一个repo来重现这个错误.您可以通过克隆repo本地运行它,只需ng test从repo根目录运行.

我采取的步骤......

  1. 使用创建应用 ng new
  2. 使用创建ContactService ng g service contact
  3. 使用创建SkillsService ng g service skills
  4. 将SkillsService添加到ContactService的构造函数(使用@Inject批注)
  5. 将SkillsService和ContactService作为提供者添加到app.module.ts
  6. 运行ng test并收到错误:Error: No provider for SkillsService!

如何为SkillsService的ContactService添加提供程序?

似乎它必须是非常简单的东西,但它很难从文档和搜索中解决.

JB *_*zet 14

您对ContactService的测试使用测试模块,该模块仅将ContactService声明为提供者.但是ContactService需要一个SkillsService.因此,SkillsService也必须是测试模块提供者的一部分:

TestBed.configureTestingModule({
  providers: [ContactService, SkillsService]
});
Run Code Online (Sandbox Code Playgroud)

您还可以在测试中使用整个应用程序模块:

TestBed.configureTestingModule({
  imports: [AppModule]
});
Run Code Online (Sandbox Code Playgroud)

但我不建议这样做,因为在应用程序增长时,测试会变得越来越慢.