2016-08-15 2 views
0

私はユニットテストのためにバックエンドサービスを模擬しようとしています。 ":( 'の[0] .ID RES' を評価)オブジェクトされていない未定義例外TypeError"TypeError:undefinedはオブジェクトではありません( 'res [0] .id'を評価しています)

describe('FreightService',() => { 
    beforeEachProviders(() => [ 
     BaseRequestOptions, 
     MockBackend, 
     FreightService, 
     provide(Http, { 
     useFactory: (backend: ConnectionBackend, 
        defaultOptions: BaseRequestOptions) => { 
     return new Http(backend, defaultOptions); 
     }, deps: [MockBackend, BaseRequestOptions]}), 

    ]); 

    describe('getFreightById',() => { 
    it('retrieves using the Freight ID', 
     inject([FreightService, MockBackend], fakeAsync((freightService, backend) => { 
     var res; 
     expectURL(backend, 'app/freight/getById?id=4'); 
     freightService.getFreightById(4).then((_res) => { 
      res = _res; 
     }) 
     tick(); 
     expect(res[0].id).toBe(4); 
     })) 
    ); 
    }); 

    // sets up an expectation that the correct URL will being requested 
    function expectURL(backend: MockBackend, url: string) { 
    backend.connections.subscribe(c => { 
     expect(c.request.url).toBe(url); 
     let response = new ResponseOptions({ 
        body: '[{"id": "4"}]' }); 
     c.mockRespond(new Response(response)); 
    }); 
    } 
}) 

私はエラーを取得しています:以下のコード・サービスは、以下の

getFreightById(id: number): Promise <Freight[]> { 

    let searchParams = new URLSearchParams(); 
    searchParams.set('id', id.toString()); 
    return this.http.get("app/freight/getById", { 
      search: searchParams 
     }) 
     .toPromise() 
     .then(this.extractData) 
     .catch(this.handleError); 
} 

私のジャスミンユニット・テスト・ケースです。どんな考えがここに間違っていますか?助けてください!!

+0

これは、res [0]が定義されていないので、オブジェクトではないので、プロパティ** id **に未定義です。 –

+0

"{body: '[{" id ":" 4 "} ] '}は返されていませんか? –

答えて

0

発見された解決策:私の応答ボディフォーマットが正しくありませんでした。

関連する問題