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

Karate框架中如何在JavaScript函数参数中使用变量?

在Karate的JavaScript函数参数中正确使用变量的方法

问题场景

参考Karate文档示例编写了如下代码:

* def greeter = function(title, name) { return 'hello ' + title + ' ' + name }
* assert greeter('Mr.', 'Bob') == 'hello Mr. Bob'

尝试在函数参数中使用变量时,编写了以下代码:

* def greeter = function(title, name) { return 'hello ' + title + ' ' + name }
* assert greeter('Mr.', #(myvartitle)) == 'hello Mr. Bob'

运行后出现语法错误,报错信息如下:

[ERROR] Failures:
[ERROR]   MyWebsiteRunner js failed:
>>>>
01: greeter('Mr.', #(myvartitle)) == 'hello Mr. Bob'
<<<<
org.graalvm.polyglot.PolyglotException: SyntaxError: Unnamed:1:15 Expected an operand but found error
greeter('Mr.', #(myvartitle)) == 'hello Mr. Bob'
               ^

- org.graalvm.polyglot.Context.eval(Context.java:401)
- com.intuit.karate.graal.JsEngine.evalForValue(JsEngine.java:141)
- com.intuit.karate.graal.JsEngine.eval(JsEngine.java:137)
- com.intuit.karate.core.ScenarioEngine.evalJs(ScenarioEngine.java:1252)
- com.intuit.karate.core.ScenarioEngine.assertTrue(ScenarioEngine.java:232)
- com.intuit.karate.ScenarioActions.assertTrue(ScenarioActions.java:242)
- java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

问题原因

#(myvartitle) 是Karate专属的表达式语法,仅适用于Karate DSL语句的特定位置,不能直接嵌入到JavaScript代码块中。在JavaScript函数调用的上下文里,这种语法不符合JS规范,因此触发语法错误。

正确解决方案

在JavaScript函数参数中直接使用变量名即可,Karate会自动将当前场景中定义的变量注入到JavaScript执行环境:

* def myvartitle = 'Bob'
* def greeter = function(title, name) { return 'hello ' + title + ' ' + name }
* assert greeter('Mr.', myvartitle) == 'hello Mr. Bob'

无论变量是提前定义的静态值,还是从接口响应、其他动态来源获取的内容,都可以直接通过变量名传递给JavaScript函数,无需额外语法包裹。


内容的提问来源于stack exchange,提问作者Stéphane GRILLON

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:45:39