You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用动态数组调用Karate Feature时抛出PolyglotException错误求助

动态数组调用Feature抛出PolyglotException的问题排查与解决

问题代码

def response = ['val1','val2']
def myKeys = response.map(function(obj){ return obj.key })
def callExtTest ="""function(key) {
    var myEncodedKey = karate.urlEncode(key);
    var myFinalUrl = url.replace('{key}', myEncodedKey);
    var result = karate.call(read('test.feature'), { myUrl: myFinalUrl });
    results.add(result);
}"""
karate.forEach(myKeys, callExtTest)

错误信息

rg.graalvm.polyglot.PolyglotException: TypeError: invokeMember (call) on com.intuit.karate.core.ScenarioBridge@761ac53 failed due to: no applicable overload found (overloads: [Method[public java.lang.Object com.intuit.karate.core.ScenarioBridge.call(java.lang.String)], Method[public java.lang.Object com.intuit.karate.core.ScenarioBridge.call(boolean,java.lang.String,org.graalvm.polyglot.Value)], Method[public java.lang.Object com.intuit.karate.core.ScenarioBridge.call(java.lang.String,org.graalvm.polyglot.Value)], Method[public java.lang.Object com.intuit.karate.core.ScenarioBridge.call(boolean,java.lang.String)]],arguments: [JavaObject[classpath:features/filename.feature (com.intuit.karate.core.Feature)] (HostObject), DynamicObject@68b0e5ec (DefaultLayout)])
.:anonymous(Unnamed:4)

原因分析

  1. 调用方法重载不匹配:karate.call的重载列表中,没有「Feature对象 + 参数Map」的组合。你用read('test.feature')返回了Feature实例,再传入参数Map,触发了无匹配重载的错误。
  2. 数据结构错误:response是字符串数组,obj.key访问会返回undefined,最终myKeys是无效的[undefined, undefined],导致后续URL替换逻辑失效。
  3. 变量未初始化:results变量未提前声明初始化,调用results.add()会触发额外错误。

解决办法

  • 修正karate.call调用方式:直接传递Feature路径字符串而非read()返回的Feature对象,搭配参数Map:
    var result = karate.call('test.feature', { myUrl: myFinalUrl });
    
    若需复用上下文,可使用带布尔参数的重载:
    var feature = read('test.feature');
    var result = karate.call(true, feature.path, { myUrl: myFinalUrl });
    
  • 修正数据结构:将response改为含key属性的对象数组,确保myKeys能获取有效值:
    def response = [{key: 'val1'}, {key: 'val2'}]
    
  • 初始化结果数组:提前声明results为空数组:
    def results = []
    

内容的提问来源于stack exchange,提问作者user1980552

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 11:15:22