0
私はhttp
リクエストのテストでcatch
メソッドを呼び出すのに苦労していますが、私は何が間違っているのか分かりません。私はすでに私のテストをここで見つけたlthersと比較しましたが、私が逃したことはできません。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);
}));
私は何をしないのですか?
を私はあなたがしようとしているものについての詳細を理解せずにわからないんだけど実現するには、実際のHTTPサービスの代わりにジャスミンスパイオブジェクトまたは 'spyOn(service.http、 'get')'を提供する方がずっと簡単です。これにより、 'mockHttp.get.and.returnValue(Observable.throw(error))'のようなことをすることができます。 – 0mpurdy
あなたの問題に対する答えを見つけられたらうれしいです。編集ではなく回答として投稿してください[理由はこちら](https://meta.stackexchange.com/questions/17845/etiquette-for-answering) -your-own-question):) – 0mpurdy