我正在玩空手道来测试一种接受不可能过去的日期的资源。
Scenario: Schedule one
Given path '/schedules'
And request read('today_at_19h30.json')
When method post
Then status 201
我为每个场景创建了一些 JSON 文件(大部分是重复的,但有细微的变化(。但是我无法认真想象每次我想运行测试时更改所有这些日期。
在遥远的未来使用日期不是一个好主意,因为有一些手动验证,这将迫使我们点击(下一个(太多次。
有没有办法在文件中包含变量或表达式?
谢谢
有多种方法可以在空手道中"破坏"JSON数据。一种方法是只使用 JS 表达式。例如:
* def foo = { a: 1 }
* foo.a = 2
* match foo == { a: 2 }
对于您的特定用例,我怀疑嵌入式表达式将是更优雅的方式。嵌入式表达式的优点在于它们与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())" }
.这可能会给你更多的想法。