Невозможно создать динамический набросок сценария с помощью вызова Java - PullRequest
1 голос
/ 31 мая 2019

Невозможно создать динамический набросок сценария с помощью вызова Java в каратэ.

Я могу создать динамический план сценария с «жестко закодированным» массивом Json, например:

* def foobar = [{ 'type': 'app' }]

Но когда я пытаюсь сгенерировать тот же массив Json из класса Java, я всегда получаю следующее предупреждение (я) о каратэ, и план динамического сценария никогда не выполняется:

WARN com.intuit.karate - игнорирует динамическое выражение, не выводится в список

- ИЛИ -

WARN com.intuit.karate - игнорирование элемента 0 списка динамических выражений, не похожего на карту

Я пытался использовать ключевые слова каратэ 'def', 'string', 'json' в качестве типа var, но безуспешно. Я даже безуспешно пытался жестко кодировать ту же строку, показанную выше в методе Java.

Я объявляю / вызываю свой класс Java в «Background:» и печатаю то, что возвращается, и он «выглядит» правильно.

Background:
 * def IdaDataApiUtil = Java.type('data.IdaDataApiUtil')
 * def foobar = IdaDataApiUtil.getClientExample('ida-sp')
 * print foobar

Затем я пытаюсь использовать JsonArray в моем «Примере», например:

Examples:
 | foobar |

На этом этапе я получаю вышеупомянутые ошибки, в зависимости от того, что я пытался вернуть (JsonArray, JsonObject, Map, List).

Если я просто использую жестко запрограммированный def:

* def foobar = [{ 'type': 'app' }]

Работает как положено.

В своем Java-коде я пробовал разные вещи:

Жестко закодированная строка Json:

public static String getClientExample() {
    return "[{ 'type': 'app' }]";
}

Список:

public static List<String> getClientExample() {
    List<String> list = new ArrayList<>();
    list.add("'type': 'app'");
    return list
}

Карта:

public static Map<String, Object> getClientExample() {
    Map<String, Object> map = new HashMap<>();
    map.put("type", "app");
    return map;
}

Я играл с вариациями ключа / значений в обоих списках / на карте, но не повезло. Я также пытался с JSONObject / JSONArray, но там тоже не повезло.

Я чувствую, что мне не хватает чего-то очевидного, но сейчас я не вижу леса сквозь деревья ...

1 Ответ

1 голос
/ 31 мая 2019

Я пытаюсь сгенерировать тот же массив Json из класса Java,

То, что вы возвращаете из кода Java, должно быть List<Map<String, Object>>, и оно должно работать нормально. Вы пробовали List<String>, и в этом проблема.

Прочитайте этот раздел документов: https://github.com/intuit/karate#type-conversion

Еще один совет: вы можете попробовать выполнить приведение, чтобы убедиться, что оно находится в нужной форме массива JSON, поэтому, если вам лень формировать правильно вложенные Map -s, просто верните необработанную строку JSON из Java, и нижняя строка преобразует его правильно.

* json foobar = foobar
...