Karate 如何为空手道DSL中的模式断言提供动态键

Karate 如何为空手道DSL中的模式断言提供动态键,karate,Karate,我想通过在模式断言中添加一个变量来匹配我的响应。我试着给出“#(值)”,但没有效果 * def value = 3 Then match object == { result : { '#(value)' { firstName : '#string',

我想通过在模式断言中添加一个变量来匹配我的响应。我试着给出“#(值)”,但没有效果

 * def value = 3

    Then match object ==
    {
         result : {
                      '#(value)'
                               {
                                  firstName : '#string',
                                  lastName : '#string'
                               }
                    }
    }
我得到的异常是'path$.result。(#value)实际值:应为null{ 名字:“#字符串” 姓氏:“#字符串”
}“

您的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)

我需要为我的请求使用动态密钥。没有办法吗?有很多方法。我刚刚更新了我的答案,这个例子使用JS。您还可以查看stringreplace来创建一个字符串,然后键入convert将其转换为JSON。非常感谢。这真的帮助了我