如何为空手道DSL中的架构断言提供动态密钥

时间:2017-11-01 06:45:40

标签: karate

我希望通过在架构断言中添加变量来匹配我的响应。我通过给出'#(value)'来尝试它,但它不起作用

 * def value = 3

    Then match object ==
    {
         result : {
                      '#(value)'
                               {
                                  firstName : '#string',
                                  lastName : '#string'
                               }
                    }
    }

我得到的例外是'path $ .result。(#value)actual:null expected {                                       firstName:'#string'                                       lastName:'#string'                                    ''

1 个答案:

答案 0 :(得分:2)

您的JSON存在严重问题。你真的想尝试使用动态密钥吗?这是不可能的。

这是一个可以帮助你弄清楚你做错了什么的工作示例:

* def actual = { result: { value: 3, foo: { firstName: 'John', lastName: 'Smith' } } }
* def value = 3
Then match actual ==
"""
{
  result : {
    value: '#(value)',
    foo: {
      firstName : '#string',
      lastName : '#string'
    }
  }
}
"""

(编辑:)看起来问的确是动态密钥,这是一个改变的例子:

* def actual = { result: { 3: { firstName: 'John', lastName: 'Smith' } } }
* def fun =
"""
function(key) {
  var temp = { result: {} };
  temp.result[key] = { firstName: '#string', lastName: '#string' };
  return temp;
}
"""
Then match actual == fun(3)