当我使用它存根请求时,nock
它会返回String
结果而不是Object
使用'Content-Type': 'application/json'
:
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
相同数据的模块。我也尝试过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);
});
它在实际请求中返回一个对象。
附言。我可以在我的响应处理程序中添加下一个代码:
if (_.isString(body))
body = JSON.parse(body);
但有些查询返回 xml 字符串,我不对这些更改负责。
假网:
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 对象,没有解析它(使用 nock),所以它应该返回 JSON 对象,与请求库的方式相同。