Karate 升级到空手道0.9.3后Javascript代码不起作用

Karate 升级到空手道0.9.3后Javascript代码不起作用,karate,Karate,功能文件中的以下函数适用于0.9.2版。升级到0.9.3,出现错误:javascript函数调用失败:索引:0.0,大小:0。代码如下: var cnd = ['test1','test2']; function set_filter(arg) { var i; var filter = {filterValues:[]}; for(i=0;i<arg.length;i++) { filter.filterValues[i] =

功能文件中的以下函数适用于0.9.2版。升级到0.9.3,出现错误:
javascript函数调用失败:索引:0.0,大小: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)
尝试下面的场景,该场景在0.9.2中工作,但在0.9.3中报告错误(如上所述)

场景:JS测试
*def过滤器模板=
"""
函数(){
变量过滤器参数={
FilterValue:[]
};
返回过滤器参数;
}
"""
*def模板=呼叫筛选器模板
*def过滤器_条件=['test1','test2']
*def设置过滤器=
"""
函数(arg){
var i;
var filter=arg.filter\u模板;

对于(i=0;i我们已经对JS转换进行了更严格的限制,所有内容都将是幕后的Java集合。如果您进行此更改,事情将开始工作:

filter.filterValues.set(i, arg.condition.get(i));
这同样适用于
push()
——使用
add()
或替代

我的强烈建议是不要使用太多JS逻辑,尤其是循环。空手道有
map()
forEach()
repeat()
等功能来解决这些需求。请参阅此处的文档:


稍后您将感谢我,因为这将使您的脚本更易于理解和维护。需要这样做的一个原因是为我们将来更改JS引擎铺平道路。

您能否将此作为一个工作示例,我可以将其粘贴到一个新的
场景中:
并在本地进行尝试?了解如何操作对我很重要您已将此JS与一个功能文件混合。或者请遵循此过程:@PeterThomas我已编辑了问题并添加了工作示例。感谢您的回复。以下内容对我有效:
filter.filterValues.add(arg.condition.get(I))
我正在标记这个问题的答案。但是,我很难理解
空手道.map()的用法
或我特定场景中的其他内置方法。我将发布一个单独的问题。仅供参考-我在.js文件中有我的筛选模板。每个测试用例指定自己的筛选条件,我使用java脚本将该条件添加到筛选模板中并执行特定测试。我不确定如何绕过jaavscript来实现这一点s、 @rochitsen我不是说零JS,而是尽可能使用最小值,不要使用循环。如果需要,请单独提问,并请保持简单。
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
filter.filterValues.set(i, arg.condition.get(i));