Khi tôi còn sơ khai yêu cầu với nock
nó trả String
kết quả thay vì Object
ngay cả với 'Content-Type': 'application/json'
:Làm thế nào để trả về đối tượng thay vì chuỗi để trả lời bằng 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');
kiểm tra:
console.log(put.response.body);
console.log(put.response.body.id);
đầu ra:
{"status":"OK","id":"05056b27b82"}
undefined
Trong mã tôi sử dụng request
mô-đun trả về Object
với s dữ liệu ame. Tôi cũng đã thử sinon
(không hoạt động đối với tôi) và fakeweb
nhưng có cùng một vấn đề.
Mã của tôi, mà tôi đang cố gắng để kiểm tra:
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);
});
Và nó sẽ trả về một đối tượng trong các yêu cầu thực.
PS. Tôi có thể thêm mã tiếp theo vào trình xử lý câu trả lời của mình:
if (_.isString(body))
body = JSON.parse(body);
Nhưng một số truy vấn trả về chuỗi xml và tôi không chịu trách nhiệm về những thay đổi đó.
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);
kết quả tương tự.
Cập nhật:
tôi đọc một vài bài viết, sử dụng JSON Object, mà không cần phân tích nó (với Nock), vì vậy nó nên trả về đối tượng JSON, cùng cách như thế nào yêu cầu thư viện làm điều đó.
nock trả về JSON. Để chuyển đổi thành Object, bạn cần chuyển đổi JSON thành Object bằng cách sử dụng 'JSON.parse' -> http://jsfiddle.net/5qaxtfz6/ –
Tôi đã cập nhật câu trả lời của mình. [Yêu cầu] (https://github.com/request/request) mô-đun trả về một đối tượng – zishe
Trong [câu hỏi này] (http://stackoverflow.com/questions/14689252/how-can-superagent-and-nock-work -tổng cộng) nó trả về một đối tượng. – zishe