2017-05-03 37 views
1

所以我有一个单元测试覆盖被karma-coverage-instanbul-reporter跟踪,当我看到覆盖报告时,:不知道为什么res.json()在单元测试覆盖率没有命中,Angular

.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函数内部命中。

有没有人有任何想法,为什么这可能是? Coverage报告是否有可能是错误的或将代码错误地映射回TypeScript?

回答

0

connection有型MockConnection,而不是any,并MockConnection没有mockBackend财产。相反,它有一个mockRespondhttps://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

相关问题