是否可以在 afterScenario 块中使用嵌入式表达式?

Is it possible to use embedded expressions inside an afterScenario block?

我在一个功能文件中有多个场景。在每个场景结束时,我需要在下一个场景开始之前“清理”。我的清理函数需要传入一个 json 对象。每个场景都有一个不同的对象。因此,我需要使用嵌入式表达式,以便删除动态数据。

我的设置是这样的:

        * configure afterScenario = 
        """
        function(){
          var deleteData = { customerData: '#(portfolio)' };
          karate.call(deleteData.feature@deletePortfolio', deleteData);
        }

场景可能是这样的:

        // here we get a brand new, unused "portfolio" value from a related function.
        * table customer1
            |portfolio  | status |
            |portfolio  | 200    |
        * call read(random.feature@random) customer1

因此,在上述场景结束时,我希望 afterScenario 启动并删除该场景的“投资组合”变量值。但是,因为它是 afterScenario 块内的 Java 互操作,所以它无法识别空手道的嵌入式表达式。有什么解决办法吗?

当你进入 JS 块时,你就“脱离”了空手道。所以嵌入式表达式不起作用,但“JS 样式”表达式起作用。

阅读一次以更清楚地了解这一点:https://github.com/karatelabs/karate#karate-expressions

所以这会起作用:

* configure afterScenario = 
    """
    function(){
      var deleteData = { customerData: portfolio };
      karate.call('deleteData.feature@deletePortfolio', deleteData);
    }

甚至:

* configure afterScenario = function(){ karate.call('deleteData.feature@deletePortfolio', { customerData: portfolio }) }

再提示一下,karate.get('someVariableName') 可以随时获取任何变量的值。

而且我确实认为您对测试进行了过度设计,请不要: