功能文件中的以下功能适用于0.9.2版。升级到0.9.3,这会导致错误:javascript function call failed: Index: 0.0, Size: 0
。下面的代码:
var cnd = ['test1','test2'];
function set_filter(arg)
{
var i;
var filter = {filterValues:[]};
for(i=0;i<arg.length;i++)
{
filter.filterValues[i] = arg[i];
}
return filter;
}
set_filter(cnd)
我也可以使用下面的方法在javascript数组中推送值,但是这在0.9.3中也停止了工作。得到错误:javascript function call failed: TypeError: arr.push is not a function
var arr = [];
arr.push('test1','test2');
请尝试以下在0.9.2中可用但在0.9.3中报告错误(如上所述)的情况
Scenario: JS test
* def filter_template =
"""
function() {
var filter_params = {
filterValues:[]
};
return filter_params;
}
"""
* def template = call filter_template
* def filter_condition = ['test1','test2']
* def setFilter =
"""
function(arg) {
var i;
var filter = arg.filter_template;
for(i=0;i<arg.condition.length;i++)
{
filter.filterValues[i] = arg.condition[i];
}
return filter;
}
"""
* def getFilter = call setFilter { filter_template: '#(template)', condition: '#(filter_condition)' }
* print getFilter
非常感谢您的帮助。
答案 0 :(得分:0)
我们已经使JS转换更加严格,所有内容都会在后台成为Java集合。如果进行此更改,一切将开始起作用:
filter.filterValues.set(i, arg.condition.get(i));
push()
也是如此-改用add()
或karate.appendTo(varname, value)
。
我的强烈建议是不要过多地使用JS逻辑尤其是循环。空手道具有map()
,forEach()
和repeat()
之类的功能来解决这些需求。请在此处参考文档:https://github.com/intuit/karate#loops
稍后您将感谢我,因为这将使您的脚本更易于理解和维护。之所以需要这样做,原因之一就是为我们将来更换JS引擎铺平了道路。