【问题标题】:Is it possible to send args to an afterScenario function?是否可以将 args 发送到 afterScenario 函数?
【发布时间】:2019-04-20 12:35:21
【问题描述】:

我在文档中看到可以在后台部分定义一个函数并在每个场景之后执行它。 见: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 });
}
"""

我想做什么:

utils/js/afterFunc.js:

function fn(args){
  karate.log('after', args.msg);
}

myTest.feature:

* configure afterScenario = read('classpath:utils/js/afterFunc.js') {msg: 'Hello !'}

【问题讨论】:

    标签: karate


    【解决方案1】:

    read 函数将读取afterFunc.js 文件,但它忽略了{msg: 'Hello !'} 参数。

    Scripts can call other scripts 但你不想立即调用脚本,是吗? 您想创建一个函数引用并将该引用分配给afterScenario 配置。

    但这还不够。你想咖喱函数 - what is currying?

    AFAIK read 不直接支持。

    有一个解决方法。 您可以读取 javascript 文件并创建一个函数,使用您选择的参数调用您的 after-scenario-function

      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);
    }
    

    就是这样。

    我向我的空手道沙盒存储库提交了一个 complete running example。该 repo 是基于 gradle 和 groovy 的。希望对你有帮助。

    【讨论】:

    • 完美运行,感谢您的回答!仅供参考,函数的命名很重要,因为如果您在其中一个场景中调用另一个 .js 文件,其中的函数也名为“fn”,则此解决方法不再适用...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多