Karate 如何制作通话结果的副本

Karate 如何制作通话结果的副本,karate,Karate,为什么下面的测试没有通过?我一定错过了一些关于复制工作原理的基本知识。它似乎引用了json对象,而不是副本 Feature: testing @one Scenario: one * def root = { name: 'inner' } Scenario: two * def a = call read('testing.feature@one') * copy b = a * set b.root.name = "copy" * ma

为什么下面的测试没有通过?我一定错过了一些关于复制工作原理的基本知识。它似乎引用了json对象,而不是副本

Feature: testing

  @one
  Scenario: one
    * def root = { name: 'inner' }

  Scenario: two
    * def a = call read('testing.feature@one')
    * copy b = a
    * set b.root.name = "copy"
    * match b.root.name == "copy"
    * match a.root.name == "called"

始终取消包装
调用的结果
。原因是特定的JSON对象是“特殊的”(Java映射),它不遵循
copy
的规则,因为您可以引用其他Java对象。因此,这将起作用:

  @one
  Scenario: one
    * def root = { name: 'inner' }

  Scenario: two
    * def temp = call read('dev.feature@one')
    * def a = temp.root
    * copy b = a
    * set b.name = "copy"
    * match b.name == "copy"
    * match a.name == "inner"

所以你回答了我的问题,实际上帮助我理解了现在发生的事情。如何执行整个JSON对象(所有子映射)的深度复制,以便保留先前的状态?如果你想要一个新的例子,我可以提供。@MarkLindell是的,请提供一个新的例子-我很好奇你为什么想要这个例子。我正在尝试为一个测试更改历史的API链接多个操作。我需要一种方法来保存帖子中的原始完整响应对象,以便以后进行比较。也许我只是走错了路。@MarkLindell我觉得很好。您已经将每个响应存储到新变量中,它是否按照您期望的方式工作?如果您能够遵循此流程并进行复制-这将有助于: