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?
好吧,當我離開它,因爲'mockBackend'它正確地執行測試,所以我不認爲'connection'變量確實有'mockBackend'屬性。但是,當我嘗試使用'mockRespond'時,我仍然看到'res.json()'沒有被擊中的代碼覆蓋率分析相同。 – NuttGuy