2017-05-03 5 views
1

ですから、私はユニットテストカバレッジをカルマ - カバレッジ - スタンパン - レポーターによって追跡しています。 、:ユニットテストカバレッジでres.json()がヒットしなかった理由、角度が

.map(res => res.json()) 

私のすべてのプロバイダーの一部は、決してテストにヒットしません。しかし、私はそれらのプロバイダのためのテストを持って、私が応答を得ていることを確認しています。ここ

私がテストだ機能の一例である:ここ

public getCampaigns(): Observable<CampaignsResponse> { 
    return this.http.get(this.campaignsUrl).map(res => res.json()); 
} 

は、この機能のためのテストである:

describe("getCampaigns",() => { 
    it("should return an Observable<CampaignsResponse>", 
    inject([CampaignsService, MockBackend], (service: CampaignsService, mockBackend: MockBackend) => { 
     // arrange 
     mockBackend.connections.subscribe((connection: any) => { 
     connection.mockBackend(new Response(new ResponseOptions({ 
      body: JSON.stringify(mockCampaigns), 
     }))); 
     }); 

     // act 
     service.getCampaigns().subscribe((campaigns) => { 
     // assert 
     expect(campaigns.campaigns.length).toEqual(1); 
    expect(campaigns.campaigns[0].id).toEqual(mockCampaigns.campaigns[0].id); 
     expect(campaigns.campaigns[0].channelID).toEqual(mockCampaigns.campaigns[0].channelID); 
     expect(campaigns.campaigns[0].name).toEqual(mockCampaigns.campaigns[0].name); 
     expect(campaigns.campaigns[0].active).toEqual(mockCampaigns.campaigns[0].active); 
     expect(campaigns.campaigns[0].createdAt).toEqual(mockCampaigns.campaigns[0].createdAt); 
     expect(campaigns.campaigns[0].updatedAt).toEqual(mockCampaigns.campaigns[0].updatedAt); 
    }); 
})); 

})。

私のテストカバレッジによると、res.json()はmap関数内で決してヒットしません。

なぜそうなのか考えている人はいますか?カバレッジレポートが間違っているか、コードを誤ってTypeScriptにマッピングしている可能性はありますか?

答えて

0

あなたconnectionではなくanyの種類MockConnectionを持ち、MockConnectionmockBackend性質を持っていません。代わりにmockRespondがあります。 https://angular.io/docs/ts/latest/api/http/testing/index/MockConnection-class.html

は、このようなテストを変更してみてください。

// arrange 
mockBackend.connections.subscribe((connection: MockConnection) => { 
    connection.mockRespond(new Response(new ResponseOptions({ 
    body: JSON.stringify(mockCampaigns), 
    }))); 
}); 
+0

まあ、私はmockBackend' 'としてそれを去るとき、それは正しくテストを実行しないので、私は' connection'変数は 'mockBackend'を持っているということだと思いますプロパティ。しかし、私が 'mockRespond'を試してみると、' res.json() 'がヒットしないというコードカバレッジ分析と同じコードが表示されています。 – NuttGuy

関連する問題