karate - 是否可以将 args 发送到 afterScenario 函数?
问题描述
我在文档中看到可以在后台部分定义一个函数并在每个场景之后执行它。见:https ://github.com/intuit/karate/blob/master/karate-demo/src/test/java/demo/hooks/hooks.feature
但我需要将 args 发送到这个函数并且没有找到任何解决方案......
在文档中:
* configure afterScenario =
"""
function(){
var info = karate.info;
karate.log('after', info.scenarioType + ':', info.scenarioName);
karate.call('after-scenario.feature', { caller: info.featureFileName });
}
"""
我想做什么:
实用程序/js/afterFunc.js:
function fn(args){
karate.log('after', args.msg);
}
我的测试功能:
* configure afterScenario = read('classpath:utils/js/afterFunc.js') {msg: 'Hello !'}
解决方案
该read
函数将读取afterFunc.js
文件,但它忽略{msg: 'Hello !'}
参数。
脚本可以调用其他脚本,但您不想立即调用该脚本,是吗?您想要创建一个函数引用并将该引用分配给afterScenario
配置。
但这还不够。你想对函数进行柯里化——什么是柯里化?
AFAIK 这不是read
直接支持的。
有一种解决方法。after-scenario-function
您可以阅读 javascript 文件并创建一个使用您选择的参数调用您的函数。
Background:
* def fn = read('classpath:after-scenario-with-params.js')
* configure afterScenario =
"""
function() {
fn(karate.info, 'hello world');
}
"""
包含以下after-scenario-with-params.js
js函数:
function fn(info, someParameter) {
karate.log('called after scenario:', info.scenarioName);
karate.log('some parameter: ' + someParameter);
}
而已。
我向我的空手道沙箱存储库提交了一个完整的运行示例。该 repo 是基于 gradle 和 groovy 的。我希望它有所帮助。
推荐阅读
- css - 如何制作可以在鼠标悬停时单独更改大小的导航栏?
- c# - 达到最大连接限制时如何更改 http.sys Web 服务器响应
- c# - 具有无限循环和 thread.sleep 高 CPU 使用率的多个线程
- flask - 我在理解 Flask 中的 UserMixin 时遇到问题
- r - R中的.Rnw文件和块的问题
- mysql - Ubuntu 18.04 部署 zabbix4.0 时,数据库类型是 PostgreSQL 而不是 MySQL。如何设置它以支持 MySQL?
- c# - 为什么添加 Mesh Collider 会使 Inverse Kinematic 腿打乱他们的运动?
- python - 即使我设置种子变量,为什么 TensorFlow 会产生不同的输出?
- java - 使用什么正确的设计模式
- ffmpeg - ffmpeg 复制图像叠加(将其放置两次到输出)