unit tutorial test karma angular jasmine karma-jasmine

tutorial - Angular2: prueba de la unidad de llamada HTTP



unit test angular 5 (2)

Para cubrir el caso negativo, puede simular una respuesta con un código de estado que no sea 200. Puedes seguir este ejemplo MockBackend.

it(''getUserInfo() while server is down'', fakeAsync(() => { let result: any; let catchedError: any; this.userUser.getUserInfo(1) .then((userInfo: any) => result = userInfo) .catch((error: any) => catchedError = error); this.lastConnection.mockRespond(new Response(new ResponseOptions({ status: 404, //here statusText: ''URL not Found'', }))); tick(); expect(result).toBeUndefined(); expect(catchedError).toBeDefined(); })); });

Soy un principiante de angular2.

Mi service.ts será,

import { Injectable } from ''@angular/core''; import { Http, Response } from ''@angular/http''; import {Headers, RequestOptions, URLSearchParams} from ''@angular/http''; import {Observable} from ''rxjs/Observable''; import ''rxjs/add/operator/map''; import ''rxjs/add/operator/catch''; import ''rxjs/add/observable/throw''; @Injectable() export class HomeService { url : string; constructor(private _http: Http) {} getUserInfo(userId : string) { this.url = "http://localhost:9080/GetUserData"; let content = new URLSearchParams(); content.set(''userId'', userId.toString()); let headers = new Headers(); headers.append(''Content-Type'', ''application/x-www-form-urlencoded''); return this._http .post(this.url, content.toString(), {headers: headers}) .map((res: Response) => res.json()) .catch(this.handleError); } handleError (error: Response | any) { let errMsg: string; if (error instanceof Response) { const body = error.json() || ''''; const err = body.error || JSON.stringify(body); errMsg = `${error.status} - ${error.statusText || ''''} ${err}`; } else { errMsg = error.message ? error.message : error.toString(); } console.error(errMsg); return Observable.throw(errMsg); } }

He escrito el caso de prueba unitaria como,

import { TestBed, async, inject } from ''@angular/core/testing''; import { HomeService } from ''./home.service''; import { BaseRequestOptions, Response, ResponseOptions, Http } from ''@angular/http''; import { MockBackend, MockConnection } from ''@angular/http/testing''; import {Observable} from ''rxjs/Observable''; describe(''FacilityPopupService'', () => { let subject: HomeService = null; let backend: MockBackend = null; let userid="UID1"; beforeEach(() => { TestBed.configureTestingModule({ providers: [ HomeService, Response, BaseRequestOptions, MockBackend, { provide: Http, useFactory: (backend: MockBackend, defaultOptions: BaseRequestOptions) => { return new Http(backend, defaultOptions); }, deps: [MockBackend, BaseRequestOptions], } ] }); }); beforeEach(inject([HomeService, MockBackend], (userService: HomeService, mockBackend: MockBackend) => { subject = userService; backend = mockBackend; })); it(''get Facility list should call endpoint and return it/'s result'', (done) => { backend.connections.subscribe((connection: MockConnection) => { let options = new ResponseOptions({ body: JSON.stringify({ success: true }) }); connection.mockRespond(new Response(options)); }); subject.getUserInfo(userid) .subscribe((response) => { expect(response).toEqual({ success: true }); done(); }); }); });

Quiero escribir el caso de prueba para el caso de éxito y el caso de error. No sé cómo ejecutar el bloqueo catch . Además, no sé cómo escribir el caso de prueba para el método handleError .

No puedo, no puedo cubrir todos los escenarios posibles aquí. ¿Puede ayudarme a obtener una cobertura del 100% para el servicio?


Puede usar el siguiente código para el caso positivo.

describe(''HomeService'',() =>{ let homeService:HomeService, mockHttp; beforeEach(() => { mockHttp=jasmine.createSpyObject(''mockHttp'',[''get'']) homeService=new HomeService(mockHttp); }); describe(''GetbyID'', =>{ it(''should get the detail of user with passed id'', =>{ let user={id:1,name:''some Name''} mockHttp.get.and.returnValue(Observable.of(false)); homeService.getUserInfo(1); expect(mockHttp.get).toHaveBeenCalledWith(''your url''); }); }); });

Para el caso negativo: comete un error en la URL y verifica si la llamada está fallando y si se invoca el método del manejador de errores o no.