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

时间:2019-12-17 23:54:43

标签: karate

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

{
  '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(_)'
    }
    """

似乎必须预先知道键的名称,因此匹配表达式可能不是测试此键的合适方法。

1 个答案:

答案 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