是否可以在 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')
可以随时获取任何变量的值。
而且我确实认为您对测试进行了过度设计,请不要:
我在一个功能文件中有多个场景。在每个场景结束时,我需要在下一个场景开始之前“清理”。我的清理函数需要传入一个 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')
可以随时获取任何变量的值。
而且我确实认为您对测试进行了过度设计,请不要: