json 响应中的“未定义”变量的Postman测试失败

qni6mghb  于 2023-02-14  发布在  Postman
关注(0)|答案(1)|浏览(277)

我不是很熟悉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
nkkqxpd9

nkkqxpd91#

如果原始响应是

"{\"_id\": \"63e8b7406e2fd8d4555554be\", 
\"first_name\": \"DeJorr\", 
\"gradeRecords\": [{\"grade\": 6.027456183070403, 
                  \"subject_name\": \"subject_name\"}, 
                  {\"grade\": 6.027456183070403, \"subject_name\": \"subject_name\"}], 
    \"last_name\": \"ThisisALastname\"}"

那么它实际上是另一个字符串(即字符串)的JSON表示

{"_id": "63e8b7406e2fd8d4555554be",
"first_name": "DeJorr",
"gradeRecords": [{"grade": 6.027456183070403,
                  "subject_name": "subject_name"},
                  {"grade": 6.027456183070403, "subject_name": "subject_name"}],
    "last_name": "ThisisALastname"}

JSON.parse会给你一个Javascript对象。

var jsonData = JSON.parse(JSON.parse(responseBody));

但是我希望服务器有一个JSON响应,所以它应该已经返回了后一个字符串。

相关问题