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

Karate1.3.1(Java8) Mock服务报错:Expected ; but found Addition

Karate Mock服务语法错误导致POST请求404问题解决

问题现象

使用Java 8搭配Karate 1.3.1框架创建Mock服务时,所有场景均触发异常,POST /api/add 请求返回404。核心错误提示为:
org.graalvm.polyglot.PolyglotException: SyntaxError: Unnamed:1:5 Expected ; but found Addition

错误日志

17:52:36.492 [armeria-common-worker-nio-2-1] DEBUG io.netty.util.ResourceLeakDetectorFactory - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@19037a8b
17:52:36.673 [armeria-common-worker-nio-2-2] WARN com.intuit.karate - scenario match evaluation failed at line 9: Mock Addition - com.intuit.karate.KarateException: js failed:
01: Mock Addition
<<<<
org.graalvm.polyglot.PolyglotException: SyntaxError: Unnamed:1:5 Expected ; but found Addition
Mock Addition
^

错误栈

  • org.graalvm.polyglot.Context.eval(Context.java:425)
  • com.intuit.karate.graal.JsEngine.evalForValue(JsEngine.java:139)
  • com.intuit.karate.graal.JsEngine.eval(JsEngine.java:135)
  • com.intuit.karate.core.ScenarioEngine.evalJs(ScenarioEngine.java:1190)
  • com.intuit.karate.core.MockHandler.isMatchingScenario(MockHandler.java:274)
  • com.intuit.karate.core.MockHandler.handle(MockHandler.java:175)
  • com.intuit.karate.http.HttpServerHandler.lambda$serve$0(HttpServerHandler.java:59)

原Feature代码

Feature: Mock API for Calculator
  Background:
    * def response = {}
    * def userInfo = { user: 'info' }
    Given url 'http://localhost:8083/api/'

  Scenario: Mock Addition
    Given path 'add'
    And method POST
    And def params = karate.jsonPath(request, '$.params')
    Then match params == [1, 2]
    And def result = params[0] + params[1]
    And def response = { result: '#(result)', user: '#(userInfo.user)' }

修复方案

问题根源在于Background块中错误使用了Given url语句。Karate的Mock服务不需要在Background中设置url,该语句会被GraalVM错误解析为JavaScript代码,引发语法错误。

移除Background中的Given url语句即可解决问题,修改后的Feature代码如下:

Feature: Mock API for Calculator
  Background:
    * def response = {}
    * def userInfo = { user: 'info' }

  Scenario: Mock Addition
    Given path 'add'
    And method POST
    And def params = karate.jsonPath(request, '$.params')
    Then match params == [1, 2]
    And def result = params[0] + params[1]
    And def response = { result: '#(result)', user: '#(userInfo.user)' }

Mock服务的路由匹配由path和method字段控制,无需提前设置url。修复后,POST /api/add 请求可正常命中Mock场景并返回预期响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:33:32