Karate 空手道:当发送jsonPath到另一个功能时,';设置';函数don';我看不到jsonPath

Karate 空手道:当发送jsonPath到另一个功能时,';设置';函数don';我看不到jsonPath,karate,Karate,我有两个特性:第一个是我有参数的地方,第二个是我想从第一个特性发送参数网的地方 第一个特点: Feature: test @dev Scenario: test * def arguments = { value: '123.00', jspath: '..transferData.amount',consent_body: 'classpath:consent_domestic.json' } * def createConsentResult = call read('

我有两个特性:第一个是我有参数的地方,第二个是我想从第一个特性发送参数网的地方

第一个特点:

Feature: test
@dev
  Scenario: test

    * def arguments = { value: '123.00', jspath: '..transferData.amount',consent_body: 'classpath:consent_domestic.json' }
    * def createConsentResult = call read('classpath:reuseable/features/changeConsentBody.feature') arguments
第二个特点:

@ignore
Feature: Change consent body - 1 parameter

  Background:
    * url ''
    * call read('classpath:reuseable/features/commonFunction.feature')

  @act
  Scenario : Change consent body - 1 parameter

    * path 'consents'
    * def consentBody = read(consent_body)
    * print "jsonPath: "+jspath
    * set consentBody jspath= value
    When request consentBody
    And method post
    Then status 201
这里
*def approvedbody=read(approvement\u body)
karate将“approvement\u body”视为一个变量,并使用该变量的值

这里,
*print“jsonPath:+jspath
karate将“jspath”视为一个变量,并使用此变量的值,然后打印:
[print]jsonPath:…transferData.amount

但是此处
*设置jspath=value
空手道不将“jspath”视为变量,也不使用此变量的值。相反,空手道显示错误:

changeApproverBody.feature:17-意外路径:jspath


在这种情况下,空手道需要将“jspath”视为一个变量,并使用该变量的值。

很抱歉,如果你真的想让人们有耐心去理解问题,你的问题必须简化。请以后参考:

也就是说,我看到了两个明显的问题。顺便说一下,请在
=
标志的两侧保留空白:

* set consentBody jspath = value
变量不适用于
set
命令。并且不能使用JsonPath。如果您有动态路径,则可以执行此操作,请参阅:

如果要“批量”更新数组,而不是
.transferData.amount
-请使用以下操作:

* def foo = [{},{}]
* def fun = function(x){ x.transferData = { amount: 100 }; return x }
* def res = karate.map(foo, fun)
* match res == [{ transferData: { amount: 100 } }, { transferData: { amount: 100 } }]

最后,我敦促您仔细阅读本文,尽量避免使用“通用”测试用例和使用
调用
,这只会使事情变得不必要地复杂:

另一种方法是在
同意书\u hominal.json
中使用嵌入式表达式,您可以添加
”#(值)“
作为要修改的所有
金额的值。类似这样的
{transferData:{amount:'#(value)}}}
如果“变量对set命令不起作用”,那么为什么对“approvedbody”和“value”起作用呢?对于三个参数中的两个,它是有效的,我认为如果它也适用于第三个参数,这将是合乎逻辑的。@cheparsky
set
对于90%编写简单测试用例而不试图太“通用”的人来说是有用的。如果您觉得不正确,请假定
set
关键字不存在,并坚持使用
eval
* def foo = [{},{}]
* def fun = function(x){ x.transferData = { amount: 100 }; return x }
* def res = karate.map(foo, fun)
* match res == [{ transferData: { amount: 100 } }, { transferData: { amount: 100 } }]