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
相关产品推荐
相关产品推荐

