2016-12-05 213 views
3

我想測試我的Angular2組件中的錯誤處理,因此想模擬一個服務來返回一個Observable.throw('錯誤')。如何使用Jasmine和Karma和Angular 2來完成?如何在Angular2測試中模擬Observable.throw?

+1

您能否給我們提供一個代碼示例?爲您的問題添加上下文,讓我們提供準確的答案。 – Supamiu

回答

5

您應該可以看到create,並且只需撥打觀察員error即可。例如,

let mockService = { 
    error: false, 
    data: 'something', 
    getData:() => { 
    return Observable.create(observer => { 
     if (this.error) { 
     observer.error(new Error(..)) 
     } else { 
     observer.next(this.data); 
     } 
     observer.complete(); 
    }) 
    } 
} 

現在對於您的測試,您可以使用模擬成功案例和錯誤案例。對於錯誤情況,只需將error屬性設置爲true即可。在成功的情況下,next與數據一起被調用。

當您訂閱可觀察到的,你可以在調用observer.nextobserver.errorobserver.complete當過三回呼,successerror,並complete

service.getData().subscribe(
    (data) => {} // sucess 
    (error) => {} // error 
() => {}  // complete 
) 
observer

所以,相應的回調將被調用。

+0

我對這個有點麻煩。它是否在測試聲明中,即「我」將屬性設置爲「true」?當我將屬性設置爲「true」時,在我設置的測試聲明中沒有找到更改。如果這有幫助,我可以將我的代碼放在一個plnkr中。 – bmd

0

你可以簡單地模擬像Observable.throw({status:404})這樣的Observable throw錯誤對象,並測試observable的錯誤塊。

const xService = fixture.debugElement.injector.get(SomeService); 
const mockCall = spyOn(xService, 'method') 
         .and.returnValue(Observable.throw({status: 404})); 
相關問題