Enums 如何使用模式验证空手道中的多个可能值

Enums 如何使用模式验证空手道中的多个可能值,enums,swagger,karate,Enums,Swagger,Karate,我目前使用的是一个招摇过市的模式,它为几个值定义枚举。我想知道我怎样才能对我的自大文件做出回应。我希望确保返回的响应值仅是模式中指定的值之一(想想Swagger中的enum)。如果响应中返回了架构内数组中未定义的任何其他内容,则测试应该失败 我如何使用以下方法实现这一点: Schema.json { "itemType":{ "hardware":[ "VIDEO CARD", "SOLID STATE DRIVE",

我目前使用的是一个招摇过市的模式,它为几个值定义枚举。我想知道我怎样才能对我的自大文件做出回应。我希望确保返回的响应值仅是模式中指定的值之一(想想Swagger中的enum)。如果响应中返回了架构内数组中未定义的任何其他内容,则测试应该失败

我如何使用以下方法实现这一点:

Schema.json

{
    "itemType":{
        "hardware":[
            "VIDEO CARD",
            "SOLID STATE DRIVE",
            "HARD DRIVE"
        ] 
    }
}
所有值都是可选的,并将以字符串值响应

答复:

{
    "itemType": {
        "hardware": "HARD DRIVE"
    }
}
我的猜测是,它可能与match response.itemType.hardware==“###string?==‘视频卡’| | | u==‘固态驱动器’| | | u==‘硬盘驱动器’类似,但我的语法可能不正确。

您可以尝试以下方法:

* def schema = 
"""
{
    "itemType":{
        "hardware":[
            "VIDEO CARD",
            "SOLID STATE DRIVE",
            "HARD DRIVE"
        ] 
    }
}
"""
* def response = 
"""
{
    "itemType": {
        "hardware": "HARD DRIVE"
    }
}
"""
* match response == { itemType: { hardware: '#? schema.itemType.hardware.contains(_)' } }
* def isValidHardware = function(x){ return schema.itemType.hardware.contains(x) }
* match response == { itemType: { hardware: '#? isValidHardware(_)' } }

我觉得这更具可读性:

      * match schema.itemType.hardware contains response.itemType.hardware
右侧有
响应
可能有点不寻常