私は、コーナーバックエンドでhttpデータサービスをテストするために、角度2のコードでカルマ/ジャスミンを実行しています。私はObservable.throwを捕まえることに固執しています。このテストのアイデアは、私がテストしているデータサービスでエラーを引き起こすレスポンスボディにパースできないジャンクを置くことによって模擬レスポンスを解析する際のエラーを引き起こすことです。ここにテストの関連部分があります。角2 /カルマ/モック接続エラー処理が動作しない
beforeEach(() => {
this.injector = ReflectiveInjector.resolveAndCreate([
{provide: ConnectionBackend, useClass: MockBackend},
{provide: RequestOptions, useClass: BaseRequestOptions},
Http,
DataQueryService,
]);
this.testDataQueryService = this.injector.get(DataQueryService);
this.backend = this.injector.get(ConnectionBackend) as MockBackend;
this.backend.connections.subscribe((connection: any) => this.lastConnection = connection);
});
...
it('Catches Errors' ,
fakeAsync(() => {
var result: any;
var errorResult: any;
//result = null;
let testObject= {testField:'blah blah'};
this.testDataQueryService.getDataFromServer ('//localhost:8080/04_EE_Project/TestServlet',null )
.subscribe(mockParsedResponse => result=mockParsedResponse, error=> this.errorResult = <any>error);
this.lastConnection.mockRespond(new Response
(new ResponseOptions({body: '######' ,
url: '//localhost:8080/04_EE_Project/TestServlet'
})));
tick();
expect(result).toBeUndefined();
expect(errorResult).toBeDefined(); //--- FAILING!!!! :(
} ) );
は、ここで私がテストしていたデータクエリサービスです。
import { Injectable } from '@angular/core';
import { Http, Response, RequestOptionsArgs } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/throw';
@Injectable()
export class DataQueryService {
constructor(private http: Http) { }
getDataFromServer(url: string, requestOptionsArgs: RequestOptionsArgs): Observable<Object> {
return this.http.get(url, requestOptionsArgs).map(this.extractData).catch(error => {
console.log('DataQueryService error thrown: ' + error);
var thrownError = Observable.throw(error)
return thrownError; }) ;
}
private extractData(res: Response) {
var result = {"status": res["status"],"statusText": res["statusText"],"type": res["type"], "headers": res["headers"] ,
"Body": res.json()};
return result || {};
}
}
を私はいくつかの時間のデバッグを費やしていると私は「キャッチ」トリガされると、「thrownErrorは」で上で定義されていることを知っていますか:デバッグから私はキャッチが活性化されて知っていますデータサービス私はテストしています(これはデバッグ用に挿入されています)。しかし、他の側に...
error=> this.errorResult = <any>error
は...エラー結果を取得していないので、エラーがコードされ、テストで実行するcatchブロックにもかかわらず、バックテストに来ていないとして、テストが失敗しました。 errorResultに値を設定するための 'subscribe'の2番目のコールバックは意図したとおりに機能していないようです。
私のアプローチが機能していないため、このテストでエラーを正常に取り込むにはどうすればよいですか?