2017-08-03 13 views
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); 
})); 

私は何をしないのですか?

+0

を私はあなたがしようとしているものについての詳細を理解せずにわからないんだけど実現するには、実際のHTTPサービスの代わりにジャスミンスパイオブジェクトまたは 'spyOn(service.http、 'get')'を提供する方がずっと簡単です。これにより、 'mockHttp.get.and.returnValue(Observable.throw(error))'のようなことをすることができます。 – 0mpurdy

+1

あなたの問題に対する答えを見つけられたらうれしいです。編集ではなく回答として投稿してください[理由はこちら](https://meta.stackexchange.com/questions/17845/etiquette-for-answering) -your-own-question):) – 0mpurdy

答えて

1

解決策はサブスクリプションを追加することでした。

それは観察可能だとして、何の加入者が存在しない場合、コールはここで、作られる完全なソリューションつもりはない:

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 = new HttpClientService(http, backendService); 

    httpClientService.get("ContractApi", "GetContracts").map((res: Response) => {}).subscribe((contracts) => { 
    }); 

    // Act 
    fixture.detectChanges(); 

    tick(); 

    // Assert 
    console.log(fixture.debugElement); 
})); 
関連する問題