Файл Dynami c в теле запроса - PullRequest
2 голосов
/ 22 января 2020

Я играю с каратэ, чтобы проверить один ресурс, который принимает дату, которая не может быть в прошлом.

Scenario: Schedule one
    Given path '/schedules'
    And request read('today_at_19h30.json')
    When method post
    Then status 201

Я создал несколько файлов JSON (в основном дубликаты, но с небольшими изменениями) для каждого сценария. Но я не могу серьезно представить себе изменение даты во всех из них каждый раз, когда я хочу выполнить свои тесты.

Использование даты в далеком будущем не очень хорошая идея, потому что есть некоторая ручная проверка, и это заставит нас нажимать (далее) слишком много раз.

Есть ли способ включить переменную или выражение в файл?

Спасибо

1 Ответ

1 голос
/ 22 января 2020

Существует несколько способов «замочить» данные 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())" }. Что может дать вам больше идей.

...