Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 4.x:没有服务提供商_Angular_Angular Services - Fatal编程技术网

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

Angular 4.x:没有服务提供商,angular,angular-services,Angular,Angular Services,我在Angular 4.x中将一个服务注入另一个服务时遇到问题,并收到错误:error:No provider for SkillsService 我创造了一个新的世界。您可以通过克隆repo并从repo根目录简单地运行ng test在本地运行它 我采取的步骤 使用ng new创建应用程序 使用ng g服务联系人创建ContactService 使用ng g服务技能创建技能服务 将SkillsService添加到ContactService的构造函数中(带有@Inject注释) 将SkillsS

我在Angular 4.x中将一个服务注入另一个服务时遇到问题,并收到错误:
error:No provider for SkillsService

我创造了一个新的世界。您可以通过克隆repo并从repo根目录简单地运行
ng test
在本地运行它

我采取的步骤

  • 使用
    ng new创建应用程序
  • 使用
    ng g服务联系人创建ContactService
  • 使用
    ng g服务技能创建技能服务
  • 将SkillsService添加到ContactService的构造函数中(带有@Inject注释)
  • 将SkillsService和ContactService作为提供者添加到app.module.ts
  • 运行
    ng测试
    并接收错误:
    错误:没有SkillsService的提供程序
  • 如何将提供者添加到SkillsService的ContactService


    看起来它一定很简单,但从文档和搜索中很难找到答案。

    您对ContactService的测试使用了一个只声明ContactService为提供者的测试模块。但是ContactService需要一种技能服务。因此,SkillsService还必须是测试模块提供商的一部分:

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

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

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

    您为什么要执行
    @Inject(SkillsService)private SkillsService:SkillsService
    ?你不能直接使用
    私有skillsService:skillsService
    ?@echonax这也是初始化服务的另一种方法,我可能错了,但是你能检查一下这些服务是否有
    @Injectable()
    decorator吗top@RahulSingh我知道,但在这种情况下它绝对没有用例。好吧,看看测试代码:。您正在尝试获取ContactService的实例,该实例需要SkillsService,但SkillsService不在测试模块的提供程序中。谢谢。我关注的是应用程序模块的配置,而不是测试设置。问题已解决:)