0
我正在努力在我的http
請求測試中調用catch
方法,但我不知道我在做什麼錯誤。我已經將我的測試與在這裏找到的測試者進行了比較,但我不知道我失去了什麼。http請求沒有被茉莉花調用
這是方法我想測試:
public get(apiName, methodName) {
return this.http.get(this.url + apiName + "/" + methodName, {
headers: headers,
search: params
}).catch((error) => {
this.backendErrorService.notify(this.handleError(error));
return Observable.throw(error);
});
}
如果我運行測試,上述方法被調用,我甚至可以檢查是否this.http.get
被調用,但我不能讓catch
獲得調用。
這是我的測試:
it("should show modal when contract service throws", fakeAsync(() => {
// Arrange
let http = TestBed.get(Http);
let backendService = TestBed.get(BackendErrorService);
let backend = TestBed.get(MockBackend);
backend.connections.subscribe((connection: MockConnection) => {
connection.mockError(new MockError(new ResponseOptions({ type: ResponseType.Error, status: 404, body: {} })));
});
let httpClientService: HttpClientService = new HttpClientService(http, backendService);
httpClientService.get("ContractApi", "GetContracts");
// Act
fixture.detectChanges();
tick();
// Assert
console.log(fixture.debugElement);
}));
我缺少什麼?
我不知道不理解更多關於你正在嘗試實現,但我發現提供一個茉莉間諜對象或'spyOn(service.http,'get')'而不是真正的http服務更簡單。這將允許你做'mockHttp.get.and.returnValue(Observable.throw(error))''。 – 0mpurdy
我很高興你找到了你的問題的答案,請張貼它作爲一個答案,而不是作爲編輯[見此爲什麼](https://meta.stackexchange.com/questions/17845/etiquette-for-answering - 你自己的問題):) – 0mpurdy