无法更新被调用功能中的变量

时间:2019-01-04 00:01:56

标签: karate

我正在尝试遵循演示中的示例: https://github.com/intuit/karate/tree/master/karate-demo/src/test/java/demo/callfeature 我需要从一个功能调用到另一个功能,并传递参考以进行更新。该引用适用于从文件读取的JSON:

  Background: 
    * url url
    * header Authorization = token
    * def payload = read('event.json')
    * set payload.createdByUser = 'karate'

  Scenario: Call another feature with arg
    * call read('classpath:common/swap-json-elements.feature') payload
    * print payload

在我的swap-json-elements.feature里面:

  Background: 
    * set new = payload.old
    * set payload.new= payload.old
    * set payload.old= new

这不起作用。在文档中很清楚的是,使用“设置”时共享的作用域是共享的,而“ def”将创建一个新变量,并且从不更新共享的作用域。

我想念什么?

1 个答案:

答案 0 :(得分:3)

如果传递参数,则按值传递。当您使用“共享范围” call时,通常不需要传递参数。因为无论如何所有变量都是可见的。尝试一个简单的示例,请注意=符号周围的空白。

main.feature

Feature:

Background:
* def json = { foo: 'bar' }
* call read('called.feature')

Scenario:
* match json == { foo: 'baz' }

called.feature

Feature:

Scenario:
* set json.foo = 'baz'
* match json == { foo: 'baz' }