我不是很熟悉Javascript和Postmen测试,所以我可能完全忽略了一些东西。无论如何,我有一个简单的API,查询一个mongo数据库并返回一个"学生"。
原始响应为:
"{\"_id\": \"63e8b7406e2fd8d4555554be\",
\"first_name\": \"DeJorr\",
\"gradeRecords\": [{\"grade\": 6.027456183070403,
\"subject_name\": \"subject_name\"},
{\"grade\": 6.027456183070403, \"subject_name\": \"subject_name\"}],
\"last_name\": \"ThisisALastname\"}"
下面是我对 Postman 的测试:
tests["Status code is 200"] = responseCode.code === 200;
var jsonData = JSON.parse(responseBody);
first_name = "DeJorr"
tests["Type: "+typeof jsonData] = jsonData.first_name == first_name;
tests["JSONDATA: "+jsonData] = jsonData.first_name == first_name;
tests["First Name: "+jsonData.first_name] = jsonData.first_name == first_name;
因此,在失败测试的日志中,如屏幕截图所示,我们可以看到'jsonData' var是一个字符串而不是一个对象,这就是为什么其余的测试失败的原因。
关于为什么JSON.parse(responseBody)不生成对象,你有什么想法吗?
如果我将原始响应复制到JavaScript REPL,一切都很好。
编辑:
服务器端代码,dumps函数来自BSON. json_util,查询的数据库是mongoDB。
def get_by_id(student_id=None, subject=None):
try:
student = collection.find_one({"_id": ObjectId(student_id)})
if not student:
return 'not found', 404
except:
# Invalid ID formats simply return not found
log.warning("Invalid ID")
return 'not found', 404
# Works with double JSON parse client side:
return dumps(student)
# Works normally client side:
student["_id"] = str(student["_id"])
return student
1条答案
按热度按时间nkkqxpd91#
如果原始响应是
那么它实际上是另一个字符串(即字符串)的JSON表示
而
JSON.parse
会给你一个Javascript对象。但是我希望服务器有一个JSON响应,所以它应该已经返回了后一个字符串。