2017-09-28 16 views
0

が、私は、非同期/のawait甘使用するためには、このような何かを約束するために、HTTP観測を変換したデータサービスがあります。HttpTestingControllerで約束をテストするには?角度2アプリケーションで

async getCustomer(id: number): Promise<Customer> { 
    return await this._http.get<Customer>(`${this.serverUrl}/customer/${id}`).toPromise(); 
} 

をこれが動作していると見て、素晴らしい作品。

私の以前のユニットテストは、しかし

mockBackend.connections.subscribe(c => { 
    expect(c.request.url).toBe(`${serverUrl}/customer/${id}`); 
    let response = new ResponseOptions({ body: mockResponseBody }); 
    expect(c.request.method).toBe(RequestMethod.Get); 
    c.mockRespond(new Response(response)); 
}); 

let actual = await service.getCustomer(id); 

ようなものでMockBackendを使用し、私は

httpMock = TestBed.get(HttpTestingController); 
// ... 1 
let actual = await service.getCustomer(id); 
// ... 2 

でこのような何かをしようとすると、今私は鶏と卵の状況に取得しています。 getCustomerメソッドは、嘲笑されたリクエストが提供されるまで返されず、http呼び出しがトリガーされるまでhttpMock.expectOneまたは​​を使用することはできません。私は、[1]にhttpMockコールを置けば
だから、私は期待は失敗しそうだ、と私は[2]、私はタイムアウトエラーを取得しています:(

にそれを置く場合を回避する方法はありますこの?

答えて

1

私はなぜそれはあなたがそうすることができますフレームワークを使用する必要があります。getCustomer呼び出しが行われる前にモックをインストールすることを防ぐん表示されません。TestBedが正確にどのように動作するか分からない。

しかし、現在の設定で行うことができます:約束を待つだけです。

httpMock = TestBed.get(HttpTestingController); 
let customerPromise = service.getCustomer(id); 
httpMock.mockRespond({}); // Or whatever 
let actual = await customerPromise; 
+0

ありがとう、それは私のばかだった。 Kindaは約束がそれ自身の価値であることを忘れていました:) – SWeko

関連する問題