Когда я окурок запрос с nock
он возвращает String
результат вместо Object
даже с 'Content-Type': 'application/json'
:Как вернуть объект вместо строки для ответа с помощью nock?
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');
проверки:
console.log(put.response.body);
console.log(put.response.body.id);
выход:
{"status":"OK","id":"05056b27b82"}
undefined
В коде я использую request
модуль который возвращает Object
с s ame данные. Я попробовал также sinon
(не работает для меня) и fakeweb
, но получил ту же проблему.
Моего код, который я пытаюсь тест:
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);
});
И это возвращает объект в реальных запросах.
PS. Я мог бы добавить следующий код в мой обработчик ответа:
if (_.isString(body))
body = JSON.parse(body);
Но некоторые из запросов возвращает XML-строку, и я не несет ответственности за такие изменения.
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);
же результаты.
Обновлено:
Я прочитал пару статей, которая использует JSON объект, без разбора его (с зарубки), поэтому он должен возвращает JSON объект, точно так же, как библиотека запроса сделать это.
nock возвращает JSON. Чтобы преобразовать в Object, вам нужно преобразовать JSON в Object с помощью 'JSON.parse' -> http://jsfiddle.net/5qaxtfz6/ –
Я обновил свой ответ. [Запрос] (https://github.com/request/request) возвращает объект – zishe
В [этот вопрос] (http://stackoverflow.com/questions/14689252/how-can-superagent-and-nock-work -одно) возвращает объект. – zishe