2017-07-29 4 views
0

partie de ma service.spec.ts est ci-dessous:La valeur du tableau JSON affiche undefiend après l'avoir converti en chaîne

service.spec.ts

it('should mock the http requests', inject([Service, MockBackend], (service, mockBackend) => { 
    let result:any; 
    mockBackend.connections.subscribe((connection) => { 
     connection.mockRespond(new Response(new ResponseOptions({ 

      body: JSON.stringify(mockResponse), 

     }))); 
    }); 
    service.getGoogle().subscribe((heroes: any) => { 
     result = heroes; 
     console.log('1', result); 
     console.log('2', result[0]); //Logs shows this as undefined!!I need to print here "aditya" 
       });  
})) 

La valeur de mockResponse est la suivante:

const mockResponse = [{"name": "aditya"}, {"name": "xyz"}];

Journaux:

LOG: 'Inside service' 
LOG: '1', Response{_body: '[{"name":"aditya"},{"name":"xyz"}]', status: null, ok: false, statusText: null, headers: null, type: null, url: null} 
LOG: '2', undefined 
    Other method 
    √ should mock the http requests 

Note: Ce '[{"name":"aditya"},{"name":"xyz"}]' est une chaîne! Comme je l'ai converti en JSON.stringify(mockResponse), si je ne l'aurais pas utilisé alors il affiche Object: [....], Object: [....].

+0

Je suivais ce https://angular.io/api/http/ResponseOptions Ici, il utilise 'body' mais quand dans la réponse' ses _body'.Does affecte-t-il? – Aditya

+0

Selon (1) 'result' n'est pas un tableau, mais un objet de réponse, qui a une propriété' _body', qui a une chaîne JSON. Donc (2) devrait être: 'JSON.parseJSON (result._body) [0]' –

Répondre

2

Vous ne savez pas exactement quelle est votre question. Le code semble faire ce que vous demandez.

Ce:

JSON.stringify(mockResponse), 

Transforme un tableau dans une chaîne. Vous faites ensuite de cette chaîne la valeur d'un objet avec une clé body. Et le retourner.

Votre méthode d'abonnement reçoit l'intégralité de l'objet Response bien que, à partir du nom de la variable, nous supposions que vous attendiez un objet Heroes. (Typescript détectera ce type d'erreur si vous définissez le type sur autre chose que any)

Maintenant, lorsque vous vous connectez result, il consigne l'objet Résultat que vous venez de recevoir. Qui comprend le corps tenant votre objet stringifié.

result[0] est vide car result n'est pas un tableau.

Je pense que vous voulez:

service.getGoogle().subscribe((result: any) => { 
    heroes = JSON.parse(result._body) 

    // heroes is now an array you started with 
    // heroes[0] == {"name":"aditya"} 
    // heroes[1] == {"name":"xyz"} 
+0

En fait, je passe la réponse codée en dur ici, qui est JSON.So j'ai créé un tableau JSON.Après la création je le passe comme une réponse qui sert ma demande fictive.Et puis voulez afficher cette réponse dans la console et tester cela. – Aditya

+0

Vous affichez votre réponse dans la console: 'Response {_body: '[{" nom ":" aditya "}, {" nom ":" xyz "}]', statut: null, ok: faux, statusText: null , en-têtes: null, tapez: null, url: null} ' –

+0

Je veux afficher" nom ":" aditya "en tant que premier élément du tableau, Comment ferais-je cela? – Aditya