Существует несколько способов «замочить» данные JSON в каратэ. Один из способов - просто использовать выражение JS. Например:
* def foo = { a: 1 }
* foo.a = 2
* match foo == { a: 2 }
Для вашего конкретного c варианта использования, я подозреваю, встроенные выражения будут более элегантным способом сделать это. Отличительной особенностью встроенных выражений является то, что они работают в сочетании с read()
API.
Например, если содержимое файла test.json
равно { "today": "#(today)" }
Background:
* def getToday =
"""
function() {
var SimpleDateFormat = Java.type('java.text.SimpleDateFormat');
var sdf = new SimpleDateFormat('yyyy/MM/dd');
var date = new java.util.Date();
return sdf.format(date);
}
"""
Scenario:
* def today = getToday()
* def foo = read('test.json')
* print foo
Что приводит к:
Running com.intuit.karate.junit4.dev.TestRunner
20:19:20.957 [main] INFO com.intuit.karate - [print] {
"today": "2020/01/22"
}
Кстати, если была определена функция getToday
, вы даже можете сделать это: { "today": "#(getToday())" }
. Что может дать вам больше идей.