Поле массива каратэ становится объектом, когда оно возвращается из функции JS
Я пытаюсь сравнить ответ с предопределенным JSON (ожидаемым), сгенерированным функцией JS.
JS:
function(fleetId) {
var result = {};
result.name = "TestConnection";
result.fleetId = fleetId;
result.connectionConfigDefault = { "configParameters": [{ "keyName": "N/A", "value": "testValue" }], "id": 4 }
return result;
}
Тестовое задание:
...
Then match connection.response ==
"""
{
connectionConfigDefault: '#(connectionJson.connectionConfigDefault)',
fleetId: '#(connectionJson.fleetId)',
id: '#number',
name: '#(connectionJson.name)'
}
"""
Возвращение JS:
"connectionConfigDefault": {
"configParameters": { "0": { "keyName": "N/A", "value": "testValue" } }
}
вместо ожидаемого:
"connectionConfigDefault": {
"configParameters": [{ "keyName": "N/A", "value": "testValue" }]
}
PS Я прочитал похожий вопрос, но ответ не помог мне решить проблему.
2 ответа
Вы можете сделать 1 вещь.. перед возвратом вашего JSON в JavaScript преобразуйте его в строку, используя configParameters = JSON.stringify(configParameters)
Теперь вызовите эту функцию из файла объектов с переменной json.
In function "function(fleetId)"
перед возвратом результата преобразуйте его в строку, набрав
result = JSON.stringify(result)
здесь вы будете называть эту функцию из каратэ
* json fleetId = function(fleetId)
* print fleetId
Я надеюсь, что это решит ваш вопрос
Да, в JDK есть странная ошибка, с которой вы обычно никогда не сталкивались, если не начали делать вложенные массивы в JS: https://github.com/intuit/karate/blob/master/karate-junit4/src/test/java/com/intuit/karate/junit4/demos/js-arrays.feature
Обходной путь здесь состоит в том, чтобы сделать строительство JSON, используя Каратэ, а не JS:
РЕДАКТИРОВАТЬ: увидеть использование read()
ниже вместо "in-line":
# * def conf = { "configParameters": [{ "keyName": "N/A", "value": "testValue" }], "id": 4 }
* def fun =
"""
function(fleetId) {
var result = {};
result.name = "TestConnection";
result.fleetId = fleetId;
var conf = read('conf.json');
result.connectionConfigDefault = conf;
return result;
}
"""
Так как у каратэ есть много хороших способов, почему бы вам не использовать их:
* def fleetId = 1
* set temp
| path | value |
| name | 'TestConnection' |
| fleetId | fleetId |
| connectionConfigDefault | { "configParameters": [{ "keyName": "N/A", "value": "testValue" }], "id": 4 } |
* print temp