Karate框架中如何在JS函数内使用外部声明的变量
问题解决:Karate中eval内JS函数遍历外部数组并正确打印对象
问题分析
你遇到的控制台输出[object Object]并非循环识别不了数组名称,而是直接打印JavaScript对象时,默认会输出类型字符串而非对象具体内容。另外代码里的Var是笔误,应改为小写var,但这不是核心问题。
解决方案
1. 修正eval内的打印方式,序列化对象
将打印语句改为console.log(JSON.stringify(md)),把对象转为JSON字符串即可查看具体内容:
* def results = response.results * eval """ var md; // 修正Var为小写var for(var id in results){ md = results[id].data; console.log(JSON.stringify(md)); // 序列化对象后打印 } """
2. 使用Karate原生循环替代eval(更推荐)
Karate提供了简洁的原生循环语法,无需在eval中编写复杂JS,代码更易维护:
* def results = response.results * karate.forEach(results, function(item) { var md = item.data; console.log(JSON.stringify(md)); })
3. 使用for...of遍历数组(更符合数组遍历的JS语法)
如果坚持在eval中写JS,用for...of遍历数组元素更直观,无需处理索引:
* def results = response.results * eval """ for(var item of results){ var md = item.data; console.log(JSON.stringify(md)); } """
内容的提问来源于stack exchange,提问作者Tripti Paliwal
相关产品推荐
相关产品推荐

