Quando ho stub richiesta con nock
esso restituisce String
risultato invece di Object
anche con 'Content-Type': 'application/json'
:Come restituire l'oggetto anziché la stringa per la risposta con la cocca?
var response = {
success: true,
statusCode: 200,
body: {
"status": "OK",
"id": "05056b27b82",
}
};
Test.BuildRequest();
Test.SendRequest(done);
nock('https://someapi.com')
// also tried
// .defaultReplyHeaders({
// 'Content-Type': 'application/json',
// 'Accept': 'application/json'
// })
.post('/order')
.reply(200, response.body,
'Content-Type': 'application/json',
'Accept': 'application/json');
controllo:
console.log(put.response.body);
console.log(put.response.body.id);
uscita:
{"status":"OK","id":"05056b27b82"}
undefined
Nel codice che utilizzo modulo request
che restituisce Object
con la s dati ami. Ho provato anche sinon
(non funziona per me) e fakeweb
ma ho avuto lo stesso problema.
Il mio codice, che sto cercando di prova:
var request = require('request');
// ...
request(section.request, function (err, response, body) {
if (err || _.isEmpty(response))
return result(err, curSyndication);
//if (_.isString(body))
// body = JSON.parse(body);
section.response.body = body;
console.log(body.id); // => undefined (if uncomment previous code - 05056b27b82)
_this.handleResponse(section, response, body, result);
});
e restituisce un oggetto nelle richieste reali.
PS. Potrei aggiungere il codice seguente nel mio gestore di risposta:
if (_.isString(body))
body = JSON.parse(body);
Ma alcuni di query restituisce stringa XML, e io non sono responsabile di tali modifiche.
Fakeweb:
fakeweb.registerUri({
uri: 'https://someapi.com/order',
body: JSON.stringify({
status: "OK",
id: "05056b27b82",
}),
statusCode: 200,
headers: {
'User-Agent': 'My requestor',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
Test.SendRequest(done);
stessi risultati.
Aggiornato:
ho letto un paio di articoli, che utilizza JSON oggetto, senza analizzarlo (con la cocca), quindi dovrebbe restituisce oggetto JSON, allo stesso modo di come richiesta libreria di farlo.
restituisce JSON. Per convertire in Object devi convertire il JSON in Object usando 'JSON.parse' -> http://jsfiddle.net/5qaxtfz6/ –
Ho aggiornato la mia risposta. [Richiesta] (https://github.com/request/request) modulo restituisce un oggetto – zishe
In [questa domanda] (http://stackoverflow.com/questions/14689252/how-can-superagent-and-nock-work -insieme) restituisce un oggetto. – zishe