2017-05-03 4 views
1

J'ai donc une couverture de test unitaire qui est suivie par le karma-coverage-instanbul-reporter, quand je regarde le rapport de couverture , le:Je ne peux pas comprendre pourquoi res.json() n'est pas atteinte dans la couverture de test unitaire, Angular

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

Une partie de tous mes fournisseurs n'est jamais atteinte lors du test. Mais j'ai des tests pour ces fournisseurs, et je vérifie que j'obtiens une réponse.

Voici un exemple sur les fonctions que je teste:

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

Voici le test de cette fonction:

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

}); Mais selon ma couverture de test, res.json() n'est jamais frappé à l'intérieur de la fonction de carte.

Est-ce que quelqu'un a des idées sur pourquoi cela pourrait être? Est-il possible que le rapport de couverture ne soit pas correct ou que le code soit incorrectement recopié en TypeScript?

Répondre

0

Votre connection a le type MockConnection au lieu de any et MockConnection ne dispose pas d'une propriété mockBackend. Au lieu de cela, il a un mockRespond. https://angular.io/docs/ts/latest/api/http/testing/index/MockConnection-class.html

Essayez de modifier le test comme celui-ci:

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

Eh bien quand je le laisse comme 'mockBackend' il fait exécuter correctement le test, donc je pense que la variable' connection' a un 'mockBackend' propriété. Mais, quand j'essaie avec 'mockRespond', je vois toujours les mêmes analyses de couverture de code que' res.json() 'ne se fait pas toucher. – NuttGuy