我有問題關於單元測試服務作爲依賴的組件和此服務器取決於Http
。 我讀這個文檔:Test a component with an async service如何測試一個服務/組件依賴於另一個服務,而這又取決於Http服務?
我真的有相同的代碼,就像這個例子:
ngOnInit(): void {
this.twainService.getQuote().then(quote => this.quote = quote);
}
這裏的方式是我的代碼:code
的文檔說,當我測試組件這取決於另一項服務,我必須:
- 將此服務設置爲模塊提供商 注入組件
獲得服務:它
twainService = fixture.debugElement.injector.get(TwainService);
安裝間諜:
spy = spyOn(twainService, 'getQuote').and.returnValue(Promise.resolve(testQuote));
我做的一樣: 這裏是我的規格文件:spec file。 我在第21行提供服務,我在29注入服務,我設置間諜在32.
所以的問題:如果我做的一切像文檔說我得到的錯誤:Error: No provider for Http!
。很明顯,這個錯誤是因爲我的GoodsDataService
取決於Http
服務。我應該如何處理它?我做到了這一點:我創建了簡單的JavaScript對象,並用它嘲笑了我的真實GoodsDataService
。我還在此對象中添加了getGoods
方法存根。所有這些東西都允許我在不注入真實GoodsDataService
的情況下測試主要組件。但我不確定這個解決方案。我認爲它很髒並且不正確。什麼是單元測試組件/服務的正確方式取決於另一個服務,而這又取決於Http
服務?有什麼想法嗎?
我覺得這是個好主意。我在想同樣的事情。但爲什麼docs不說呢?這是明顯的嗎? –
我不會說這是有意義的,因爲理解如何一切工作都需要一些時間。但我會說,一旦你明白它如何炒作,這聽起來合乎邏輯。我同意,鑑於他們將使用HTTP的服務作爲服務引入,他們應該解釋如何在測試中提供假的Http服務,或者如何導入HttpModule。你應該打開一個問題。 –