Возможная ошибка с глубокой копией подфункции __arg - PullRequest
1 голос
/ 11 апреля 2019

При передаче json в подфункцию * copy не выполняет глубокое копирование, и поэтому обе переменные экземпляра указывают на одни и те же данные.

Я подтвердил * Копия действительно глубока, когда данные не являютсяпередано в подфункцию.

Родительская функция


  Feature: calling debug feature

    Scenario:
      * def jsonA = { a: "aValue", children: [{childA: "childAValue" }]}
      * def result = call read('Debug.feature') jsonA

Подфункция

Feature: debug

  Background:
    * def jsonA = __arg
    * copy jsonACopy = jsonA
    * set jsonACopy $.children[0].childA = 'childAValueUpdated'
    * print "TEST: -------------------", jsonA, jsonACopy

    Scenario:
      * match jsonACopy != jsonA

После обновления jsonACopy я не ожидаю, что jsonA будет изменен.

15:58:10.517 [main] INFO  com.intuit.karate - [print] TEST: ------------------- {
  "a": "aValue",
  "children": [
    {
      "childA": "childAValueUpdated"
    }
  ]
}
 {
  "a": "aValue",
  "children": [
    {
      "childA": "childAValueUpdated"
    }
  ]
}

15:58:10.519 [main] ERROR com.intuit.karate - assertion failed: path: $, actual: {a=aValue, children=[{"childA":"childAValueUpdated"}]}, NOT expected: {a=aValue, children=[{"childA":"childAValueUpdated"}]}, reason: all key-values matched
15:58:10.520 [main] ERROR com.intuit.karate - feature call failed: Debug.feature
arg: {a=aValue, children=[{"childA":"childAValueUpdated"}]}
Debug.feature:10 - path: $, actual: {a=aValue, children=[{"childA":"childAValueUpdated"}]}, NOT expected: {a=aValue, children=[{"childA":"childAValueUpdated"}]}, reason: all key-values matched
CallDebug.feature:6 -
Debug.feature:10 - path: $, actual: {a=aValue, children=[{"childA":"childAValueUpdated"}]}, NOT expected: {a=aValue, children=[{"childA":"childAValueUpdated"}]}, reason: all key-values matched
HTML report: (paste into browser to view) | Karate version: 0.9.2

1 Ответ

1 голос
/ 11 апреля 2019

Можете ли вы подтвердить, что это та же проблема, что и здесь: https://github.com/intuit/karate/issues/708

Вы также можете обратиться к этому другому ответу по переполнению стека: https://stackoverflow.com/a/55377608/143475

Также см. Открытыйвопрос выше - и прокомментируйте, если у вас есть какие-либо выводы или предложения для добавления.

Пока что, пожалуйста, обойдите, выполнив преобразование строки:

* def a = foo
* string b = foo
* json b = b
...