簡體   English   中英

在使用 Jasmine 進行單元測試時,我應該模擬或監視或存根注入我的組件中的服務嗎?

[英]While doing Unit testing with Jasmine should I mock or spy or stub my service which is injected in my component?

在我的 component.ts 中,服務已被注入到訂閱服務中的函數並接收信息的組件的構造函數中。 在這種情況下如何測試我的組件?

在 component.ts 我有以下代碼:-

在這種情況下我該如何繼續?

您要么必須模擬您的服務,這在單元測試方面總是一個好主意,要么使用下面解釋的間諜。

選項模擬:

...
providers: [
 {provide: PartService, useClass: MockPartService},
],
...

class MockPartService {
   list(): Observable<Part[]> {
   return Observable.of([...]);
}

您必須使用與您在測試中調用的方法簽名相同的方法簽名來編寫 MockService。 您可能希望將您的預期返回值硬編碼到此 MockClass 中。 當您想要模擬例如 API 請求等時,這通常是您想要的,因此您的測試不會拋出。

選項間諜:

const mockParts: Part[] = [...]
const serviceSpy = spyOn(PartService, 'list').and.ReturnValue(Observable.of(mockParts));

當您希望服務為您的測試帶來特定回報時,請使用此選項。

您也可以在測試中自由混合。 存根spyOn(YourService, 'YourMethod').and.stub()只會阻止調用實際方法,但不會返回任何值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM