当您不知道结构时,如何在空手道中验证响应?



我正在尝试编写一些空手道测试来检查某些预期结构的响应。例如,有一个对象看起来像这样:

{
'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

最新更新