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 mockresponse
one:
mockbackend.connections.subscribe( (connection: mockconnection) => { connection.mockerror(new error('some error')); });
Comments
Post a Comment