Ich versuche, einen Komponententest für eine Methode zu schreiben, die eine http.get-Methode enthält, und ich habe Probleme, sie zum Laufen zu bringen. Ich weiß, dass die Einstellung der Klasse für Http als MockBackend falsch ist und deshalb bekomme ich den Fehler: get() method does not exist
aber ich weiß nicht, was ich für die Mock-Klasse hinter http verwenden soll.Angular 2 RC6-Test HTTP.get löst einen Fehler aus Die get() -Methode existiert nicht
describe('Http Service',() => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
SharedHttpService,
{
provide: SharedCookieService,
useClass: MockSharedCookieService
}, {
provide: Http,
useClass: MockBackend
}
]
});
});
beforeEach(inject([ SharedHttpService, Http ], (_httpService: SharedHttpService, _mockBackend: MockBackend) => {
httpService = _httpService;
mockBackend = _mockBackend;
}));
describe('get',() => {
it(`should call setAuthToken and make the get request with the authorization headers`,() => {
let fakeUrl: string = 'www.fakeurl.com';
httpService.headers = mockHeaders;
spyOn(httpService, 'setAuthToken');
spyOn(httpService.http, 'get').and.callThrough();
mockBackend.connections.subscribe((connection: MockConnection) => {
let options: ResponseOptions = new ResponseOptions({
body: { }
});
connection.mockRespond(new Response(options));
});
httpService.get(fakeUrl,() => { })
.subscribe(() => {
expect(httpService.setAuthToken).toHaveBeenCalled();
expect(httpService.http.get).toHaveBeenCalledWith(fakeUrl, { headers: mockHeaders });
});
});
});
-Code hinter:
export class SharedHttpService {
private headers: Headers = new Headers();
constructor( private cookieService: SharedCookieService,
private http: Http ) { }
public get(address: string, callback: any): Observable<any> {
return this.setAuthToken()
.map(() => { })
.switchMap(() => {
return this.http.get(address, { headers: this.headers })
.map(callback)
.catch((error: any) => this.handleError(error));
});
}
}