2017-08-08 83 views
2

我無法注入到服務中的角4.x的其他服務,並收到錯誤消息:Error: No provider for SkillsService!角4.x版:無提供服務

我創建了一個repo that reproduces this error。您可以通過克隆repo並在repo根目錄中簡單運行ng test來在本地運行。

步驟我花了......

  1. 創建的應用程序與ng new
  2. ng g service contact
  3. 創建的ContactService與ng g service skills
  4. 創建SkillsService添加SkillsService到的ContactService的構造器(帶@Inject註釋)
  5. 將SkillsService和ContactService作爲提供者添加到app.module.ts中
  6. 運行ng test並收到錯誤消息:Error: No provider for SkillsService!

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

看起來它一定是非常簡單的東西,但它證明很難從文檔中查找和搜索。

+0

你爲什麼要做'@Inject(SkillsService)private skillsService:SkillsService'?你不能只用'私人技能服務:技能服務'嗎? – echonax

+0

@echonax這也是另一種初始化服務的方式,我可能是錯誤的,但是你能否檢查這些服務是否有@Injectable()'裝飾器頂部 –

+0

@RahulSingh我知道,但在這種情況下它絕對沒有用例。 – echonax

回答

5

您對ContactService的測試使用僅將ContactService聲明爲提供者的測試模塊。但是ContactService需要一個SkillsService。所以SkillsService還必須測試模塊的供應商的一部分:

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

你也可以用整個應用程序模塊在您的測試:

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

但我不會建議,因爲你的測試在應用程序增長時會變得越來越慢。

+0

謝謝。我專注於應用模塊配置而非測試設置。問題解決了 :) – Baldy