我在将服务注入(inject)到Angular 4.x中的另一个服务时遇到麻烦,并收到错误:Error: No provider for SkillsService!
我创建了一个repo that reproduces this error。您可以通过克隆存储库并仅从存储库根目录运行ng test来在本地运行它。

我采取的步骤...

  • 使用ng new创建应用程序
  • 使用ng g service contact创建ContactService
  • 使用ng g service skills创建技能服务
  • 将SkillsService添加到ContactService的构造函数中(带有@Inject批注)
  • 将SkillsService和ContactService都添加到app.module.ts作为提供者
  • 运行ng test并收到错误:Error: No provider for SkillsService!

  • 如何将提供者添加到ContactService的SkillsService?

    看来这一定很简单,但事实证明,很难从文档中找出并进行搜索。

    最佳答案

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

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

    您还可以在测试中使用整个应用程序模块:
    TestBed.configureTestingModule({
      imports: [AppModule]
    });
    

    但是我不建议这样做,因为随着应用程序的增长,您的测试会越来越慢。

    10-06 00:29