karate - 是否可以在 afterScenario 块中使用嵌入式表达式?
问题描述
我在功能文件中有多个场景。在每个场景结束时,我需要在下一个场景开始之前“清理”。我的清理函数需要传入一个 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')
可以随时为您获取任何变量的值。
而且我确实认为您过度设计了您的测试,请不要:
https://stackoverflow.com/a/46080568/143475
推荐阅读
- vaadin - Vaadin 13beta1 中的 CustomField 顶部似乎有很大的额外空间
- missing-data - 如果缺失具有明确的含义,如何处理缺失值?
- mysql - 将 sql 查询转换为子查询
- angular - 由于 http 拦截器 Angular 6 中的错误,无法构建 Angular 应用程序
- google-cloud-platform - 为什么在 Metric Explorer 中使用基于日志的指标时,我可以选择严重性作为过滤器,而不是 textPayload
- pdf - 如何在现有 pdf 中使用 iText 4 使不可见文本可见
- sql - 大查询 - 将 INT 转换为日期
- java - 想知道这条线是如何工作的。int j = list.size() - i - 1;
- python - 是否可以在运行时在 python 中重新定义函数?
- keras - 没有自定义损失函数的 OCR 代码