Можно ли отправить аргументы в функцию afterScenario? - PullRequest
3 голосов
/ 20 апреля 2019

Я видел в документе, что можно определить функцию в фоновой части и выполнять ее после каждого сценария.см .: https://github.com/intuit/karate/blob/master/karate-demo/src/test/java/demo/hooks/hooks.feature

Но мне нужно отправить аргументы этой функции и не найти никаких решений ...

В документе:

* 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 !'}

1 Ответ

2 голосов
/ 22 апреля 2019

Функция read считывает файл afterFunc.js, но игнорирует параметр {msg: 'Hello !'}.

Сценарии могут вызывать другие сценарии , но вы не хотите вызывать сценарий немедленно, не так ли? Вы хотите создать ссылку на функцию и назначить эту ссылку для конфигурации afterScenario.

Но этого недостаточно. Вы хотите, чтобы функция карри - что такое карри?

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

Вот и все.

Я отправил полный пример выполнения в мой репозиторий для песочницы каратэ. Репо градл и заводной основе. Надеюсь, это поможет.

...