为什么函数内部的运算符 '+' 不修改 * def 生成的变量?
Why operator '+' inside functions does not modify * def made variables?
我正在尝试处理 json-s 的列表,这是我从 API.
得到的答案
[
{
"originalEstimate": "16h",
"remainingEstimate": "9h",
"timeSpent": "7h"
},
{
"originalEstimate": "64h",
"remainingEstimate": "63h",
"timeSpent": "1h"
}
]
我必须对字段求和,我想出了一个代码,但它似乎没有修改 mySum 变量。
对于这个例子,我只使用了 'originalEstimate'。
我尝试手动添加元素并且有效。例如:(parseFloat(getNum(json[0].originalEstimate))) == 16.0
getNum 是一个从字符串中删除 'h' 的函数。
代码如下所示:
* def getNum = function (a) {return a.substring(0,a.length()-1)}
* text raw =
"""
[
{
"originalEstimate": "16h",
"remainingEstimate": "9h",
"timeSpent": "7h"
},
{
"originalEstimate": "64h",
"remainingEstimate": "63h",
"timeSpent": "1h"
}
]
"""
* json json = raw
* def mySum = 0
* def fn = function(x) {mySum = mySum + (parseFloat(getNum(x.originalEstimate)))}
* eval karate.forEach(json,fn)
* print mySum
我希望看到 80.0 作为 originalEstimate 总和,但我收到了 0。此外,它运行完美,只是没有修改 mySum
是的,当您声明一个函数时,变量锁定为函数声明时的值。解决方案是使用 karate.get()
和 karate.set()
:
* def getNum = function(x){ return x.substring(0, x.length() - 1) }
* def sum = 0
* def fun = function(x){ var temp = karate.get('sum') + parseFloat(getNum(x.originalEstimate)); karate.set('sum', temp) }
* def response =
"""
[
{
"originalEstimate": "16h",
"remainingEstimate": "9h",
"timeSpent": "7h"
},
{
"originalEstimate": "64h",
"remainingEstimate": "63h",
"timeSpent": "1h"
}
]
"""
* eval karate.forEach(response, fun)
* print sum
我正在尝试处理 json-s 的列表,这是我从 API.
得到的答案[
{
"originalEstimate": "16h",
"remainingEstimate": "9h",
"timeSpent": "7h"
},
{
"originalEstimate": "64h",
"remainingEstimate": "63h",
"timeSpent": "1h"
}
]
我必须对字段求和,我想出了一个代码,但它似乎没有修改 mySum 变量。
对于这个例子,我只使用了 'originalEstimate'。
我尝试手动添加元素并且有效。例如:(parseFloat(getNum(json[0].originalEstimate))) == 16.0
getNum 是一个从字符串中删除 'h' 的函数。
代码如下所示:
* def getNum = function (a) {return a.substring(0,a.length()-1)}
* text raw =
"""
[
{
"originalEstimate": "16h",
"remainingEstimate": "9h",
"timeSpent": "7h"
},
{
"originalEstimate": "64h",
"remainingEstimate": "63h",
"timeSpent": "1h"
}
]
"""
* json json = raw
* def mySum = 0
* def fn = function(x) {mySum = mySum + (parseFloat(getNum(x.originalEstimate)))}
* eval karate.forEach(json,fn)
* print mySum
我希望看到 80.0 作为 originalEstimate 总和,但我收到了 0。此外,它运行完美,只是没有修改 mySum
是的,当您声明一个函数时,变量锁定为函数声明时的值。解决方案是使用 karate.get()
和 karate.set()
:
* def getNum = function(x){ return x.substring(0, x.length() - 1) }
* def sum = 0
* def fun = function(x){ var temp = karate.get('sum') + parseFloat(getNum(x.originalEstimate)); karate.set('sum', temp) }
* def response =
"""
[
{
"originalEstimate": "16h",
"remainingEstimate": "9h",
"timeSpent": "7h"
},
{
"originalEstimate": "64h",
"remainingEstimate": "63h",
"timeSpent": "1h"
}
]
"""
* eval karate.forEach(response, fun)
* print sum