我正在尝试编写一些空手道测试,以检查响应是否符合预期的结构。例如,有一个看起来像这样的对象:
{
'true|true':'disabled',
'true|false':'locked',
'false|false':'enabled',
'false|true':'disabled',
'default':'enabled'
}
但是,键和值可以是任何字符串。必须有一种指定方法,但是我不知道如何使用通用方法。
本质上,我想测试的是:1)对象不为空,2)每个键和值都是一个字符串(不是对象且不为null)。
基本匹配如下:
* def objects = $fields..objects
And match each objects ==
"""
{
key1: '#? isString(_)',
key2: '#? isString(_)'
}
"""
似乎必须预先知道键的名称,因此匹配表达式可能不是测试此键的合适方法。
答案 0 :(得分:2)
您可以像这样提取所有键:
* def keys = karate.keysOf(object)
因此,一旦有了,就可以开展业务:
* def foo = { a: 1, b: 2 }
* def keys = karate.keysOf(foo)
* match each keys == '#string'
* assert keys.length > 0
有关其他想法,请参见JSON转换,例如karate.forEach()
:https://github.com/intuit/karate#json-transforms