При передаче 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