升级至空手道0.9.3后,JavaScript代码无法正常工作

时间:2019-06-13 02:15:32

标签: karate

功能文件中的以下功能适用于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

非常感谢您的帮助。

1 个答案:

答案 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引擎铺平了道路。