Karate 升级到空手道0.9.3后Javascript代码不起作用
功能文件中的以下函数适用于0.9.2版。升级到0.9.3,出现错误: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] =
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));