我正在尝试编写一些空手道测试来检查某些预期结构的响应。例如,有一个对象看起来像这样:
{
'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(_)'
}
"""
看起来必须提前知道键的名称,因此匹配表达式可能不是测试此方法的合适方法。
您可以像这样提取所有键:
* 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