Angular Can';我不明白为什么res.json()在单元测试覆盖率中没有被命中

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

所以我有一个单元测试覆盖率被karma Coverage instanbul reporter跟踪,但当我查看覆盖率报告时:

.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()
相同的代码覆盖率分析。