MockBackend
class
deprecated
A mock backend for testing the Http
service.
Deprecated: see https://angular.io/guide/http
class MockBackend implements ConnectionBackend { connections: any connectionsArray: MockConnection[] pendingConnections: any verifyNoPendingRequests() resolveAllConnections() createConnection(req: Request): MockConnection }
Description
This class can be injected in tests, and should be used to override providers to other backends, such as XHRBackend
.
Properties
Property | Description |
---|---|
connections: any | EventEmitter of This property only exists in the mock implementation, not in real Backends. |
connectionsArray: MockConnection[] | An array representation of This property only exists in the mock implementation, not in real Backends. |
pendingConnections: any | EventEmitter of This property only exists in the mock implementation, not in real Backends. |
Methods
verifyNoPendingRequests() |
---|
Checks all connections, and raises an exception if any connection has not received a response. |
|
This method only exists in the mock implementation, not in real Backends. |
resolveAllConnections() |
---|
Can be used in conjunction with |
|
This method only exists in the mock implementation, not in real Backends. |
createConnection() |
---|
Creates a new |
Usage notes
Example
import {Injectable, Injector} from '@angular/core'; import {async, fakeAsync, tick} from '@angular/core/testing'; import {BaseRequestOptions, ConnectionBackend, Http, RequestOptions} from '@angular/http'; import {Response, ResponseOptions} from '@angular/http'; import {MockBackend, MockConnection} from '@angular/http/testing'; const HERO_ONE = 'HeroNrOne'; const HERO_TWO = 'WillBeAlwaysTheSecond'; @Injectable() class HeroService { constructor(private http: Http) {} getHeroes(): Promise<String[]> { return this.http.get('myservices.de/api/heroes') .toPromise() .then(response => response.json().data) .catch(e => this.handleError(e)); } private handleError(error: any): Promise<any> { console.error('An error occurred', error); return Promise.reject(error.message || error); } } describe('MockBackend HeroService Example', () => { beforeEach(() => { this.injector = Injector.create([ {provide: ConnectionBackend, useClass: MockBackend}, {provide: RequestOptions, useClass: BaseRequestOptions}, Http, HeroService, ]); this.heroService = this.injector.get(HeroService); this.backend = this.injector.get(ConnectionBackend) as MockBackend; this.backend.connections.subscribe((connection: any) => this.lastConnection = connection); }); it('getHeroes() should query current service url', () => { this.heroService.getHeroes(); expect(this.lastConnection).toBeDefined('no http service connection at all?'); expect(this.lastConnection.request.url).toMatch(/api\/heroes$/, 'url invalid'); }); it('getHeroes() should return some heroes', fakeAsync(() => { let result: String[]; this.heroService.getHeroes().then((heroes: String[]) => result = heroes); this.lastConnection.mockRespond(new Response(new ResponseOptions({ body: JSON.stringify({data: [HERO_ONE, HERO_TWO]}), }))); tick(); expect(result.length).toEqual(2, 'should contain given amount of heroes'); expect(result[0]).toEqual(HERO_ONE, ' HERO_ONE should be the first hero'); expect(result[1]).toEqual(HERO_TWO, ' HERO_TWO should be the second hero'); })); it('getHeroes() while server is down', fakeAsync(() => { let result: String[]; let catchedError: any; this.heroService.getHeroes() .then((heroes: String[]) => result = heroes) .catch((error: any) => catchedError = error); this.lastConnection.mockError(new Response(new ResponseOptions({ status: 404, statusText: 'URL not Found', }))); tick(); expect(result).toBeUndefined(); expect(catchedError).toBeDefined(); })); });
© 2010–2019 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://v7.angular.io/api/http/testing/MockBackend