#karate
#каратэ
Вопрос:
Я видел в документе, что можно определить функцию в фоновой части и выполнять ее после каждого сценария. смотрите: https://github.com/intuit/karate/blob/master/karate-demo/src/test/java/demo/hooks/hooks .особенность
Но мне нужно отправить аргументы в эту функцию и не нахожу никаких решений…
В документе:
* 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:
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);
}
Вот и все.
Я передал полный запущенный пример в свой репозиторий karate sandbox. Репозиторий основан на gradle и groovy. Надеюсь, это поможет.
Комментарии:
1. Это работает отлично, спасибо за ваш ответ! К вашему сведению, именование функции важно, потому что, если вы вызываете другой файл .js в одном из сценариев с функцией, также названной «fn», этот обходной путь больше не работает…