如何返回对象而不是字符串以响应 nock
How to return object instead of string for response with nock?
当我用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);
});
它在实际请求中返回一个对象。
PS.我可以在我的响应处理程序中添加下一个代码:
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 对象,就像请求库这样做一样。
您的nock配置没有任何问题,但是您没有告诉request
将响应解析为JSON。
从request
方法文档(强调我):
json
- 将正文设置为值的 JSON 表示形式,并添加内容类型:应用程序/json 标头。此外,将响应正文解析为 JSON。回调参数获得 3 个参数:
- 适用时出现错误(通常来自 http。客户端请求对象)
- 一个 http.传入消息对象
- 第三个是响应正文(字符串或缓冲区,或 JSON 对象,如果提供了
json
选项)
因此,您需要将 json
属性设置为section.request
对象上的true
:
var request = require('request');
// ...
section.request.json = true;
request(section.request, function (err, response, body) {
//..
});
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 如何将字符串值从php页面发送到java脚本页面
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 对id以某个字符串开头的元素进行计数
- Javascript逻辑运算符和字符串/数字
- 反向字符串比较
- 如何有效地将游戏数据存储在URL查询字符串中
- 可变大小的JavaScript字符串如何成为基元类型
- 将DOM节点值与字符串Javascript进行比较
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 本地存储中的字符串到字节数组转换
- JavaScript按钮/输入/函数,字符串反转
- 从查询字符串参数推断出正确的数据类型
- 高亮显示与数组字符串一起使用时文本插件中断
- 如何返回对象而不是字符串以响应 nock