1

我有下面的快乐路径响应模式

var responseSchema = 
{
   "type": "object",
   "properties": {
      "value": {
        "type": "object",
        "properties":{
           "items": {
              "type": "array",
              "items": {
                 "type": "object",
                 "properties": {
                    "patientGuid": {"type": "string" },
                    "givenName": {"type": "string" },
                    "familyName": {"type": "string" } ,
                    "combinedName" : {"type": "string" }
                 },
                 "required": ["patientGuid","givenName","familyName"]
              }                 
           }
        }
      }
   }
};

快乐路径响应:

{
    "value": {
       "items": [
           {
              "patientGuid": "e9530cd5-72e4-4ebf-add8-8df51739d15f",
              "givenName": "Vajira",
              "familyName": "Kalum",
              "combinedName": "Vajira Kalum"
           }
        ],
        "href": "http://something.co",
        "previous": null,
        "next": null,
        "limit": 10,
        "offset": 0,
        "total": 1
    },
    "businessRuleResults": [],
    "valid": true
}

我检查 if 条件以验证响应模式是否正确:

if(responseBody !== null & responseBody.length >0)
{
    var responseObject = JSON.parse(responseBody);

    if(tv4.validate(responseObject, responseSchema))
    {  
      //  do something
    } 
    else
    {
      // log some msg
    }
}

即使我得到以下错误响应,架构验证条件(嵌套 if)也会通过。

{
    "value": {
        "items": [],
        "href": "http://something.co",
        "previous": null,
        "next": null,
        "limit": 10,
        "offset": 0,
        "total": 0
    },
    "businessRuleResults": [],
    "valid": true
}

为什么响应模式验证没有失败,因为响应没有必填字段?

4

1 回答 1

1

当我运行您的代码并从响应数据中删除一个属性时,它似乎工作正常:

邮差

不过我会建议一些事情 - 该tv4模块并不出色,它没有积极地工作(我认为已经有几年了),并且在 Postman 项目上提出了一堆关于它有多糟糕的投诉/问题并询问以便在本机应用程序中替换它。

您是否考虑过创建一个测试来检查架构?这是非常基本的,可以很容易地重构并包含在一些逻辑中,但它会检查您的响应的不同值类型。

pm.test("Response data format is correct", () => {
    var jsonData = pm.response.json()

    // Check the type are correct
    pm.expect(jsonData).to.be.an('object')
    pm.expect(jsonData.value).to.be.an('object')
    pm.expect(jsonData.value.items).to.be.an('array')
    pm.expect(jsonData.value.items[0]).to.be.an('object')

    // Check the value types are correct
    pm.expect(jsonData.value.items[0].combinedName).to.be.a('string')
    pm.expect(jsonData.value.items[0].givenName).to.be.a('string')
    pm.expect(jsonData.value.items[0].familyName).to.be.a('string')
    pm.expect(jsonData.value.items[0].patientGuid).to.a('string')
});

此外,您使用的语法现在是较旧的样式,您不再需要JSON.parse(responseBody)响应正文,因为pm.response.json()基本上是在做同样的事情。

于 2018-02-13T13:34:36.930 回答