2017-05-03 1 views
1

Hit So habe ich eine Unit Test Coverage von der Karma-Berichterstattung-instanz-Reporter verfolgt, wenn ich den Coverage-Bericht obwohl , die:Kann nicht herausfinden, warum res.json() nicht in Einheit Test Coverage, Angular

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

Anteil von allen meinen Providern wird nie im Test getroffen. Aber ich habe Tests für diese Anbieter und überprüfe, dass ich eine Antwort bekomme. Hier

ist ein Beispiel für die Funktionen Ich teste:

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

Hier ist der Test für diese Funktion:

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); 
    }); 
})); 

});

Aber entsprechend meiner Testabdeckung res.json() wird nie innerhalb der Kartenfunktion getroffen.

Hat jemand irgendwelche Ideen, warum das sein könnte? Ist es möglich, dass der Coverage-Bericht einfach falsch ist oder den Code falsch an TypeScript abbildet?

Antwort

0

Ihre connection hat den Typ MockConnection statt any und MockConnection keine mockBackend Eigenschaft. Stattdessen hat es eine mockRespond. https://angular.io/docs/ts/latest/api/http/testing/index/MockConnection-class.html

Versuchen Sie den Test wie folgt ändern:

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

Nun, wenn ich es lassen, wie 'mockBackend' sie den Test korrekt ausführt, so dass ich glaube, dass die' connection' Variable einen 'mockBackend' hat Eigentum. Aber wenn ich mit dem 'mockRespond' versuche, sehe ich immer noch die gleichen Code Coverage-Analysen, die' res.json() 'nicht getroffen werden. – NuttGuy

Verwandte Themen