难以在空手道中获取功能文件的有条件调用

发布于 2025-02-09 07:05:15 字数 1470 浏览 1 评论 0原文

难以在空手道中获取功能文件的条件调用。

很难弄清楚为什么该语法不编译。有什么想法吗?

* def authenticator = read('classpath:features/functions/oauth2.feature')
* def oauth = cloud_envs.includes(env) ? karate.call(authenticator) : {}

空手道。CALL可以自己工作正常。无论我尝试什么,都只会失败。

错误是:

* def oauth = cloud_envs.includes(env) ? karate.call(authenticator) : {}0.031
js
js failed:
>>>>
01: cloud_envs.includes(env) ? karate.call(authenticator) : {}
<<<<
org.graalvm.polyglot.PolyglotException: TypeError: invokeMember (call) 
on com.intuit.karate.core.ScenarioBridge@8216db 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)], 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,org.graalvm.polyglot.Value)]], arguments: [JavaObject[classpath:features/functions/oauth2.feature (com.intuit.karate.core.Feature)] (HostObject)])
- <js>.:program(Unnamed:1)

classpath:features/group_info_queries.feature:10

由于此调用在同一测试中起作用,因此似乎应该有效:

* def token = cloud_envs.includes(env) ? 'Bearer ' + oauth.accessToken : 'n/a'

Trouble getting a conditional call of a feature file to work in Karate.

Having trouble figure out why this syntax does not compile. Any ideas?

* def authenticator = read('classpath:features/functions/oauth2.feature')
* def oauth = cloud_envs.includes(env) ? karate.call(authenticator) : {}

The karate.call works fine on it's own. Just fails in the if-condition OR ternary, regardless of what I try.

The error is:

* def oauth = cloud_envs.includes(env) ? karate.call(authenticator) : {}0.031
js
js failed:
>>>>
01: cloud_envs.includes(env) ? karate.call(authenticator) : {}
<<<<
org.graalvm.polyglot.PolyglotException: TypeError: invokeMember (call) 
on com.intuit.karate.core.ScenarioBridge@8216db 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)], 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,org.graalvm.polyglot.Value)]], arguments: [JavaObject[classpath:features/functions/oauth2.feature (com.intuit.karate.core.Feature)] (HostObject)])
- <js>.:program(Unnamed:1)

classpath:features/group_info_queries.feature:10

Seems like it should work since this call, in the same test, works:

* def token = cloud_envs.includes(env) ? 'Bearer ' + oauth.accessToken : 'n/a'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如梦初醒的夏天 2025-02-16 07:05:15

我能够以这种方式工作。不知道为什么我必须这样黑客。丑陋,但有效。

* eval
"""
var tokResponse = karate.call('functions/oauth2.feature')
var emptyResponse = {tokResponse: ''}
if (tokResponse) {
  karate.set('oauth', tokResponse)
} else {
  karate.set('oauth', emptyResponse)
}
"""

I was able to get it to work this way. Not sure why I had to hack it like this. Ugly but it works.

* eval
"""
var tokResponse = karate.call('functions/oauth2.feature')
var emptyResponse = {tokResponse: ''}
if (tokResponse) {
  karate.set('oauth', tokResponse)
} else {
  karate.set('oauth', emptyResponse)
}
"""
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文