Angular Can';我不明白为什么res.json()在单元测试覆盖率中没有被命中
所以我有一个单元测试覆盖率被karma Coverage instanbul reporter跟踪,但当我查看覆盖率报告时:Angular Can';我不明白为什么res.json()在单元测试覆盖率中没有被命中,angular,typescript,jasmine,karma-runner,karma-coverage,Angular,Typescript,Jasmine,Karma Runner,Karma Coverage,所以我有一个单元测试覆盖率被karma Coverage instanbul reporter跟踪,但当我查看覆盖率报告时: .map(res => res.json()) 我所有提供者中的一部分在测试中从未命中。但我确实对这些提供商进行了测试,并且正在验证我是否得到了响应 下面是我正在测试的函数的示例: public getCampaigns(): Observable<CampaignsResponse> { return this.http.get(this.cam
.map(res => res.json())
我所有提供者中的一部分在测试中从未命中。但我确实对这些提供商进行了测试,并且正在验证我是否得到了响应
下面是我正在测试的函数的示例:
public getCampaigns(): Observable<CampaignsResponse> {
return this.http.get(this.campaignsUrl).map(res => res.json());
}
public getCampaigns():可观察{
返回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);
});
}));
description(“getCampaigns”,()=>{
它(“应该返回一个可观察的”,
注入([活动服务,MockBackend],(服务:活动服务,MockBackend:MockBackend)=>{
//安排
mockBackend.connections.subscribe((连接:任意)=>{
连接.mockBackend(新响应(新响应选项({
正文:JSON.stringify(mock),
})));
});
//表演
service.getCampaigns().subscribe((活动)=>{
//断言
期望(活动.活动.长度).toEqual(1);
expect(magnities.magnities[0].id).toEqual(mockmagnities.magnities[0].id);
expect(magnities.magnities[0].channelID).toEqual(mockmagnities.magnities[0].channelID);
expect(campaiments.campaiments[0].name).toEqual(mockcampaiments.campaiments[0].name);
预期(活动。活动[0]。活动)。toEqual(模拟活动。活动[0]。活动);
expect(magnities.magnities[0].createdAt).toEqual(mockmagnities.magnities[0].createdAt);
expect(magnities.magnities[0].updatedAt).toEqual(mockmagnities.magnities[0].updatedAt);
});
}));
}))
但是根据我的测试覆盖率,res.json()从未在map函数中被命中
有人知道为什么会这样吗?覆盖率报告可能是错误的还是将代码错误地映射回TypeScript?您的
连接具有类型MockConnection
而不是any
,并且MockConnection
没有mockBackend
属性。相反,它有一个mockRespond
尝试按如下方式修改测试:
// arrange
mockBackend.connections.subscribe((connection: MockConnection) => {
connection.mockRespond(new Response(new ResponseOptions({
body: JSON.stringify(mockCampaigns),
})));
});
您的连接
具有类型MockConnection
而不是any
,并且MockConnection
没有mockBackend
属性。相反,它有一个mockRespond
尝试按如下方式修改测试:
// arrange
mockBackend.connections.subscribe((connection: MockConnection) => {
connection.mockRespond(new Response(new ResponseOptions({
body: JSON.stringify(mockCampaigns),
})));
});
当我将它保留为mockBackend
时,它确实正确地执行了测试,因此我确实认为connection
变量有一个mockBackend
属性。但是,当我尝试使用mockRespond
时,我仍然看到与res.json()
相同的代码覆盖率分析没有被命中。当我将其保留为mockBackend
时,它确实正确地执行了测试,因此我确实认为连接
变量确实具有mockBackend
属性。但是,当我尝试使用mockRespond
时,我仍然看到了与res.json()
相同的代码覆盖率分析。