not found error angular unit-testing typescript angular2-http

found - cómo simular error de http para la prueba angular2



module not found error can t resolve angular (4)

Estoy escribiendo pruebas unitarias para un servicio angular2. Fragmentos de código:

// jasmine specfile // already injected MockConnection into Http backend.connections.subscribe ((c: MockConnection) => { connection = c; }); // doing get-request myServiceCallwithHttpRequest ().subscribe (result => { // this test passes! expect (result).toEqual ({ "message": "No Such Object" }); // this test fails, don''t know how to get the response code expect (whereIsResponseStatus).toBe (404); }); connection.mockRespond (new Response (new ResponseOptions ({ body: { "message": "No Such Object" }, status: 404 })));

mi servicio:

// service myServiceCallwithHttpRequest (): Observable<Response> { return this.http.get (''/my/json-service'').map (res => { // res.status == null return res.json () }) .catch (this.handleError); // from angular2 tutorial }

La primera expectativa es que está bien, el programa entra en la llamada del mapa, no la captura. Pero, ¿cómo obtengo el código de estado 404? res.status es nulo.


Para que funcione el error simulado, debe importar ResponseType de @ angular / http e incluir el tipo de error en la respuesta simulada, luego extender la respuesta e implementar el error

import { Response, ResponseOptions, ResponseType, Request } from ''@angular/http''; import { MockConnection } from ''@angular/http/testing''; class MockError extends Response implements Error { name:any message:any } ... handleConnection(connection:MockConnection) { let body = JSON.stringify({key:''val''}); let opts = {type:ResponseType.Error, status:404, body: body}; let responseOpts = new ResponseOptions(opts); connection.mockError(new MockError(responseOpts)); }


Repasando el código fuente en node_modules/@angular/http/testing/mock_backend.d.ts . MockConnection.mockRespond ya está en su código. MockConnection.mockError es lo que puede necesitar. Juega con él y mira lo que obtienes.


funciona para mi:

mockConnection.mockRespond (new Response (new ResponseOptions ({ body: {}, status: 404 })));


.subscribe usar .subscribe sobre el observable para registrar el success , el error y la devolución de llamada completed

Código

myServiceCallwithHttpRequest (): Observable<Response> { return this.http.get (''/my/json-service'').map (res => { // res.status == null return res.json () }) .subscribe( data => this.saveJwt(data.id_token), //success err => { //error function //error object will have status of request. console.log(err); }, () => console.log(''Authentication Complete'') //completed ); //.catch (this.handleError); // from angular2 tutorial }