angular2 - how to simulate error on http.post unit test -


i m writing uni-test login method http.post call, like:

this.http.post( endpoint, creds, { headers: headers})         .map(res => res.json())         .subscribe(         data => this.onlogincomplete(data.access_token, credentials),           err => this.onhttploginfailed(err),         () => this.trace.debug(this.componentname, "login completed.")     ); 

the problem i'm not able simulate error branch; everytime called onlogincomplete method;

here test:

it("check  atfer login, console show error ", inject(   [traceservice, http, mockbackend, wsiendpointservice],   (traceservice: traceservice, http: http,     backend: mockbackend, wsiendpoint: wsiendpointservice) => {    let tokentest: number =  404 ;    let response: responseoptions = null {} // think have modify    let connection: any;    backend.connections.subscribe((c: any) => connection = c);    let authservice: authservice = new authservice(http, service1, service2);    authenticationservice.login({ "username": "a", "password": "1" });    connection.mockrespond(new response(response));    expect(error);  })); 

thanks again everyone.

first need override xhrbackend class mockbackend one:

describe('httpservice tests', () => {   beforeeachproviders(() => {     return [       http_providers,       provide(xhrbackend, { useclass: mockbackend }),       httpservice     ];   });    (...) }); 

notice httpservice service uses http object , want test.

then need inject mockbackend , subscribe on connections property. when request sent, corresponding callback called , can specify response elements body. service receive response response of call. you'll able test service method based on this.

below describe how test getitems method of httpservice:

it('should return list of items', inject([xhrbackend, httpservice, injector], (mockbackend, httpservice, injector) => {   mockbackend.connections.subscribe(     (connection: mockconnection) => {       connection.mockrespond(new response(         new responseoptions({           body: [ { id: '1', label: 'item1' }]         })));       });    httpservice.getitems().subscribe(     items => {       expect(items).toequal([ { id: '1', label: 'item1' }]);     });   }); }); 

here code of getitems method of httpservice:

@injectable() export class httpservice {   constructor(private http:http) {   }    getitems(): observable<any[]> {     return this.http.get('/items').map(res => res.json());   } } 

to simulate error use mockerror method instead of mockresponseone:

  mockbackend.connections.subscribe(     (connection: mockconnection) => {       connection.mockerror(new error('some error'));     }); 

Comments