我在将服务注入 Angular 4.x 中的另一个服务时遇到问题,并收到错误:Error: No provider for SkillsService!
我创建了一个重现此错误的存储库。 可以通过克隆存储库并简单地从存储库根目录运行ng test
在本地运行此操作。
我采取的步骤...
- 使用
ng new
创建应用 - 使用
ng g service contact
创建联系人服务 - 使用
ng g service skills
创建技能服务 - 将技能服务添加到联系人服务的构造函数(带有@Inject注释(
- 将技能服务和联系人服务作为提供程序添加到 app.module.ts
- 运行
ng test
并收到错误:Error: No provider for SkillsService!
如何将技能服务的提供者添加到联系人服务?
看起来它一定是非常简单的事情,但事实证明很难从文档和搜索中找出答案。
您对 ContactService的测试使用一个测试模块,该模块仅将 ContactService 声明为提供程序。但是ContactService需要一个SkillsService。因此,技能服务也必须是测试模块提供者的一部分:
TestBed.configureTestingModule({
providers: [ContactService, SkillsService]
});
您还可以在测试中使用整个应用程序模块:
TestBed.configureTestingModule({
imports: [AppModule]
});
但我不建议这样做,因为随着应用程序的增长,您的测试会变得越来越慢。