[英]How to write unit test for http with httpheaders in Angular 2 Karma Jasmine?
我嘗試對我的服務進行一些測試。 其中主要是休息電話。 但是我的一些 Rest 調用有 HttpHeaders。 如何進行包含標頭參數的測試?
我想對此進行測試:
public getAllNodes(): Observable<any> {
let headers: HttpHeaders = new HttpHeaders();
headers = headers.append('Content-Type', 'application/json');
headers = headers.append('Authorization', 'someTokenABC');
headers = headers.append('subscriptionId', 'aaa111');
headers = headers.append('organizationId', 'bbb222');
return this.http.get('https://someUrl/getall', {headers: headers, observe: 'response'})
.map(response => {
return response;
})
.catch(this.handleError);
}
到目前為止,這是我的測試:
describe('#getAllNodes', () => {
let injector: TestBed;
let service: MyService;
let httpMock: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [MyService]
});
injector = getTestBed();
service = injector.get(MyService);
httpMock = injector.get(HttpTestingController);
});
it('should return an Observable<any>', () => {
var dummyNodes = [{
"contentId": "111-222-333",
"title": "some title",
}];
service.getAllNodes().subscribe(nodes => {
expect(nodes.length).toBe(1);
expect(nodes).toEqual(dummyNodes);
});
const req = httpMock.expectOne('https://someUrl/getall');
expect(req.request.method).toBe("GET");
req.flush(dummyNodes);
httpMock.verify();
});
});
在我的情況下,我收到此錯誤:預期有一個對條件“匹配 URL: https://someUrl/getall ”的匹配請求,沒有找到。
但我想這與httpheader有關。 我沒有添加這個,因為我不知道如何將它們包含在測試中。
有誰知道我如何解決這個測試?
編輯:
或者我可以做這樣的事情嗎? (nodes 是一個節點數組,在調用 getAllNodes() 時被填滿)
describe('#getAllNodes', () => {
let injector: TestBed;
let service: MyService;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [MyService]
});
injector = getTestBed();
service = injector.get(MyService);
});
it('should have no nodes at startup', () => {
expect(service.nodes.length).toBe(0);
})
it('should have more than 1 node', () => {
service.getAllNodes();
expect(service.nodes.length).toBeGreaterThan(0);
})
});
但是在最后一次測試中,它返回 0 個命中。 即使 service.getAllNodes() 應該返回多個命中。
使用 spyon 進行虛假服務呼叫。 也進口運營商。
import { of } from 'rxjs';
describe('#getAllNodes', () => {
it('should return an Observable<any>', () => {
const dummyNodes = [{
"contentId": "111-222-333",
"title": "some title",
}];
spyOn(httpMock, 'get').and.returnValue(of(dummyNodes));
service.getAllNodes().subscribe(nodes => {
expect(nodes.length).toBe(1);
expect(nodes).toEqual(dummyNodes);
});
expect(httpMock.get).toHaveBeenCalledWith(url, paramsObj);
});
我看到的唯一“問題”是更推薦使用 rxjs `pipe' 作為:
return this.http.get('https://someUrl/getall', { headers: headers, observe: 'response' }).pipe(
map((response: any) => {
return response;
}),
);
:p
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.